Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
Cactoideae
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 2
1

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

21.03.2013, 07:12. Просмотров 516. Ответов 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();
}
работает.
Конструктору непременно нужен аргумент, даже если он не собирается его использовать. Подскажите, пожалуйста, почему.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2013, 07:12
Ответы с готовыми решениями:

Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром?
Добрый день, сразу к делу, есть некий класс class some { int x; public:...

Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно»
Помогите пожалуйста, хоть с одним из заданий. 1. Создать класс. Написать...

Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?
Можно ли использовать конструктор по умолчанию и конструктор инициализации...

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор
Всем доброго времени суток! нужна ваша помощь! нужно создать класс вектор и...

Конструктор класса не видит конструктор по умолчанию другого класса
Ошибка, естественно, в Classes.cpp, в строке 20. Ругается, что у класса...

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

Цитата Сообщение от anmartex Посмотреть сообщение
Кроме этого, объект инициализировать так нельзя (строчка 10):
C++
1
Class Object();
ибо такая запись интерпретируется компилятором как прототип функции.
Вот это помогло, спасибо. Объясните, почему так интерпретируется? Мы же не в глобальной области.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,398
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. читать про конструктор с аргументами по умолчанию.
1
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
21.03.2013, 18:27 6
Цитата Сообщение от Cactoideae Посмотреть сообщение
Объясните, почему так интерпретируется? Мы же не в глобальной области.
Прототип может быть в любой области.
0
21.03.2013, 18:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2013, 18:27

Конструктор по умолчанию
Вроде в учебниках пишется, что синтезируемый компилятором конструктор по...

Конструктор по умолчанию
Показывает ошибку : 1 IntelliSense: для класса &quot;tovar&quot; не существует...

Конструктор по умолчанию
Здраститя. #include &lt;iostream&gt; using namespace std; class random {...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru