Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Cactoideae
Сообщений: n/a
#1

Конструктор по умолчанию - C++

21.03.2013, 07:12. Просмотров 466. Ответов 5
Метки нет (Все метки)

Доброе утро!

При попытке доступа к данным-элементам объекта, созданного конструктором по умолчанию, программа загибается. Возникло подозрение, что конструктор по умолчанию своё дело не делает. Поэтому написал вот что:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Class
{
public:
    int Var;
    Class ();
};
 
void main()
{
    Class Object();
    Object.Var = 1;
    cout << Object.Var;
    getchar();
}
Компилятор выдаст ошибку error C2228: выражение слева от ".Var" должно представлять класс, структуру или объединение

А вот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Class
{
public:
    int Var;
    Class (int n)
    {
    };
};
 
void main()
{
    Class Object(1);
    Object.Var = 1;
    cout << Object.Var;
    getchar();
}
работает.
Конструктору непременно нужен аргумент, даже если он не собирается его использовать. Подскажите, пожалуйста, почему.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2013, 07:12     Конструктор по умолчанию
Посмотрите здесь:

C++ Конструктор копий по умолчанию.
C++ Конструктор по умолчанию
C++ Конструктор по умолчанию
C++ Конструктор по умолчанию
Конструктор по умолчанию C++
C++ Конструктор по умолчанию
Конструктор по умолчанию C++
C++ Конструктор по умолчанию
Конструктор с атрибутом по умолчанию C++
Не работает конструктор по умолчанию C++
Перемещающий конструктор по умолчанию C++
C++ Конструктор с параметрами по умолчанию

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
1701 / 1194 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
21.03.2013, 07:45     Конструктор по умолчанию #2
Цитата Сообщение от Cactoideae Посмотреть сообщение
Возникло подозрение, что конструктор по умолчанию своё дело не делает
А где вообще его реализация? Я вижу только описание. Кроме этого, объект инициализировать так нельзя (строчка 10):
C++
1
Class Object();
ибо такая запись интерпретируется компилятором как прототип функции. Поэтому компилятор и говорит:
Цитата Сообщение от Cactoideae Посмотреть сообщение
выражение слева от ".Var" должно представлять класс, структуру или объединение
Нужно так:
C++
1
Class Object;
Но чтобы это заработало, вам нужно описать реализацию конструктора.
SDev
43 / 41 / 10
Регистрация: 15.03.2013
Сообщений: 88
21.03.2013, 08:56     Конструктор по умолчанию #3
в первом фрагменте в строке 5:
C++
1
Class (){};
Cactoideae
Сообщений: n/a
21.03.2013, 15:12     Конструктор по умолчанию #4
Цитата Сообщение от anmartex Посмотреть сообщение
А где вообще его реализация? Я вижу только описание.
Если я опишу пустой конструктор? На самом деле было (я криво перенёс):
Цитата Сообщение от SDev Посмотреть сообщение
в первом фрагменте в строке 5:
C++
1
Class (){};
Он ведь должен создать объект?

Цитата Сообщение от anmartex Посмотреть сообщение
Кроме этого, объект инициализировать так нельзя (строчка 10):
C++
1
Class Object();
ибо такая запись интерпретируется компилятором как прототип функции.
Вот это помогло, спасибо. Объясните, почему так интерпретируется? Мы же не в глобальной области.
MrGluck
Ворчун
Эксперт CЭксперт С++
6634 / 3825 / 502
Регистрация: 29.11.2010
Сообщений: 10,111
21.03.2013, 15:28     Конструктор по умолчанию #5
C++
1
2
3
4
5
6
class Class
{
    public:
        int var;
        Class (int x = 0) : var(x) {}
};
А далее хоть
C++
1
2
3
Class Object;
Object.var = 1;
cout << Object.var;
хоть
C++
1
2
Class Object(1);
std::cout << Object.var;
хоть
C++
1
2
Class Object;
cout << Object.var;
P.S. читать про конструктор с аргументами по умолчанию.
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.03.2013, 18:27     Конструктор по умолчанию #6
Цитата Сообщение от Cactoideae Посмотреть сообщение
Объясните, почему так интерпретируется? Мы же не в глобальной области.
Прототип может быть в любой области.
Yandex
Объявления
21.03.2013, 18:27     Конструктор по умолчанию
Ответ Создать тему
Опции темы

Текущее время: 10:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru