2013-04-19 3 views
1

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

Програм 1

#include<iostream> 
using namespace std; 
class xxx{ 
    private: int x; 
    public: xxx(){cout<<"constructer is called"<<endl;} 
}; 
int main(int argc, char *argv[]) 
{ 
    xxx x1;  //Constructor is called 
    return 0; 
} 

output- конструктор вызывается

Програм 2

#include<iostream> 
using namespace std; 
class xxx{ 
    private: int x; 
    public: xxx(){cout<<"constructer is called"<<endl;} 
}; 
int main(int argc, char *argv[]) 
{ 
    xxx x1();  //Constructor xxx() is not called. 
    return 0; 
} 

output- пустым Любая информация очень helpfule

+0

Поскольку это не упоминалось, это называется [Most Vexing Parse] (http://en.wikipedia.org/wiki/Most_vexing_parse). –

+0

@CaptainObvlious - это не самый неприятный синтаксический разбор. Это просто объявление функции. –

ответ

2
xxx x1; 

создает объект класса xxx, следовательно, вызывает конструктор класса xxx по умолчанию.

xxx x1(); 

объявляет функцию, которая возвращает объект класса xxx и имя функции x1, не принимает никаких параметров. Это не экземпляр класса xxx, поэтому конструктор не вызывается.

4

Это:

xxx x1(); 

является объявление функции (функция называется x1 не принимает никаких аргументов и возвращающая xxx), а не декларация переменной так не создается экземпляр xxx (следовательно, нет вызов конструктора).

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