Ответ 1
Второй объявляет функцию a(), которая возвращает базовый объект.: -)
class base {
int i;
public:
base()
{
i = 10;
cout << "in the constructor" << endl;
}
};
int main()
{
base a;// here is the point of doubt
getch();
}
В чем разница между base a
и base a()
?
в первом случае конструктор вызывается, но не во втором случае!
Второй объявляет функцию a(), которая возвращает базовый объект.: -)
base a
объявляет переменную a
типа base
и вызывает свой конструктор по умолчанию (предполагая, что это не встроенный тип).
base a();
объявляет функцию a
, которая не принимает никаких параметров и возвращает тип base
.
Причина этого заключается в том, что язык в основном указывает, что в случаях двусмысленности подобным образом следует разбирать все, что может быть проанализировано как объявление функции. Вы можете найти "С++ most vexing parse" для еще более сложной ситуации.
Из-за этого я предпочитаю new X;
более new X();
, потому что он согласуется с не-новым объявлением.
В С++ вы можете создать объект двумя способами:
Первый использует следующее объявление:
base a; //Uses the default constructor
base b(xxx); //Uses a object defined constructor
Объект удаляется, как только он выходит из текущей области.
В динамической версии используется указатель, и вы можете его удалить:
base a = new base(); //Creates pointer with default constructor
base b = new base(xxx); //Creates pointer with object defined constructor
delete a; delete b;