2014-01-21 4 views
0

У меня есть следующий класс:C++: небольшой вопрос об объекте

class aClass { 
public: 
    aClass():a(0){} 
    void print(){cout<<a<<endl;} 
private: 
    int a; 
}; 

В основной функции() Я случайно создать объект так:

aClass obj(); 

Я думал, что компилятор будет бросаться как ожидается, вызовет конструктор копии по умолчанию, но внутри скобки() нет аргумента. Интересно, что ошибки вообще нет. Поэтому я стараюсь, чтобы получить доступ к функции-члена по телефону:

obj.print(); 

Теперь он бросает эту ошибку:

request for member 'print' in 'obj', which is of non-class type 'aClass()' 

Может кто-нибудь объяснить мне это? Что такое obj(), что было создано?

ответ

1

Это объявление функции.

Язык допускает декларации функций внутри других функций; эффект заключается в объявлении функции в окружающем пространстве имен, но только для того, чтобы сделать имя доступным в пределах области объявления.

+0

насколько возможно может быть объявлена ​​функция main()? –

+0

@TuBui: Потому что язык позволяет это сделать. Я добавил несколько подробностей о том, что именно он делает. –

4
aClass obj(); 

Это не экземпляр класса aClass созданный его конструктор по умолчанию.

Эта функция функции функции не принимает параметров и возвращает aClass.

+0

Можете ли вы объяснить больше, показывая, как это будет выглядеть, если бы это был экземпляр этого класса, созданного конструктором по умолчанию? – starsplusplus

+0

@starsplusplus "aClass obj;" без скобок будет построенный по умолчанию экземпляр aClass. – nvoigt

Смежные вопросы