С++ Создание экземпляра класса?

Возможный дубликат:
конструктор по умолчанию с пустыми скобками
Создать экземпляр класса с круглыми скобками или без них?

Программа:

class Foo
{
   public:
      Foo ( int bar = 1 )
      {
         cout << "bar=" << bar;
      }
};

int main() {

   cout << "0 - ";
   Foo foo_0 ( 0 ) ;
   cout << '\n';

   cout << "1 - ";
   Foo foo_1 ();
   cout << '\n';

   cout << "2 - ";
   Foo foo_4;
   cout << '\n';

   return 0;

}

Выход:

0 - bar=0
1 - 
2 - bar=1

Вопрос: почему пример №1 не работает, а примеры №0 и №2 работают?


person Kolyunya    schedule 10.09.2012    source источник


Ответы (2)


Foo foo_1 ();

является объявлением функции, объект не создается. Это функция с именем foo_1, которая не принимает параметров и возвращает объект Foo.

Правильный способ построить объект есть

Foo foo1;

Эта концепция называется раздражающим синтаксическим анализом C++. Краткое описание заключается в том, что все, что можно рассматривать как объявление, таковым и является.

person Luchian Grigore    schedule 10.09.2012
comment
Спасибо! Как всегда исчерпывающий ответ! - person Kolyunya; 10.09.2012
comment
Кстати, пример #0 тоже правильный, верно? - person Kolyunya; 10.09.2012

foo_1(); другими словами, это известно как Null Intialize, вы должны знать разницу между созданием объекта и инициализацией значения.

person Chethan R    schedule 10.09.2012