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

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

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

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

21.03.2013, 07:12. Просмотров 476. Ответов 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++
Здраститя. #include &lt;iostream&gt; using namespace std; class random { public: random(int b){a=b;} ~random(){} int...

Конструктор по умолчанию - C++
Я то ли динамику недопоняла, то ли классы, то ли конструктор... И теперь совсем запуталась. Что нужно написать в конструкторе без...

Конструктор по умолчанию - C++
как использовать конструктор по умолчанию в конструкторе с параметром? К по умолчанию заполняет массив заранее определёнными символами, а...

Конструктор по умолчанию - C++
Всем привет! Если в классе вообще нет конструктора, чем будут инициализироваться члены класса? И в чем отличие объект() и объект...

Конструктор по умолчанию - C++
Здравствуйте, есть такой код: explicit RFileDownloader(QObject *parent = 0); explicit RFileDownloader(const QUrl &amp;url = QUrl(),...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
1701 / 1194 / 495
Регистрация: 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Эксперт С++
7171 / 4337 / 633
Регистрация: 29.11.2010
Сообщений: 11,784
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. читать про конструктор с аргументами по умолчанию.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2013, 18:27     Конструктор по умолчанию
Еще ссылки по теме:

Конструктор по умолчанию - C++
У меня получается создавать конструктор по умолчанию если в хедере эти значения указаны: class Unit { protected: string name; ...

Конструктор с атрибутом по умолчанию - C++
Есть пример из книги по Qt: class MyClass : public QObject { Q_OBJECT Q_PROPERTY(bool readOnly READ isReadOnly WRITE...

Не работает конструктор по умолчанию - C++
Нужно в конструкторе по умолчанию создать динамический массив и заполнить его элементами, но при компиляции выводится сообщение &quot;Не...

Перемещающий конструктор по умолчанию - C++
Генерируется ли конструктор перемещения для простых структур? Например в таком вариант обмен объектами при сортировке будет производится...

Конструктор с параметром по умолчанию - C++
Здравствуйте, знаю, что здесь про конструкторы много говорили, но я не смог решить свою проблему поэтому обращаюсь (хотя мне кажется что...

Конструктор с параметрами по умолчанию - C++
пытаюсь создать класс с параметрами по умолчанию(я да, надеюсь, что я не путаюсь в терминах) #include &lt;iostream&gt; class some { ...


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.03.2013, 18:27     Конструктор по умолчанию #6
Цитата Сообщение от Cactoideae Посмотреть сообщение
Объясните, почему так интерпретируется? Мы же не в глобальной области.
Прототип может быть в любой области.
Yandex
Объявления
21.03.2013, 18:27     Конструктор по умолчанию
Ответ Создать тему
Опции темы

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