2016-06-18 2 views
1

C++ tutorial С, глава Классы (I), перегрузêи конструкторы:класса конструкторы, перегруженные конструкторы и объект инициализации

Но этот пример также вводит специальный вид конструктора: конструктор по умолчанию. Конструктор по умолчанию - это конструктор, который не принимает никаких параметров, и является особым, потому что он вызывается, когда объект объявляется, но не инициализируется никакими аргументами. В приведенном выше примере конструктор по умолчанию вызывается для rectb. Обратите внимание, как rectb даже не построен с пустым множеством скобок - в самом деле, пустые круглые скобки не могут быть использованы для вызова конструктора по умолчанию:

Rectangle rectb; // ok, default constructor called 
Rectangle rectc(); // oops, default constructor NOT called 

Это происходит потому, что пустой набор скобок бы из rectc - объявление функции вместо объявления объекта: это была бы функция, которая не принимает аргументов и возвращает значение типа Rectangle.

Таким образом, от того, что я понимаю:

class someclass { 
    public: 
     someclass() { 
      std::cout << "Default constructor" << std::endl; 
     } 
     someclass(int arg) { 
      std::cout << "Constructor that uses passed argument (" << arg << " in this case)" << std::endl; 
     } 
}; 


int main() { 
    someclass object1; 
    //outputs "Default constructor" 

    someclass object2(1294); 
    //outputs "Constructor that uses passed argument (1294 in this case)" 
} 

Но как мне определить конструктор, который вызывается, когда someclass object();? Мои мысли были someclass(void) {} (не уверен об этом) или используя значение по умолчанию для аргументов (someclass(int arg = 1294) {}), но как этот случай правильно обрабатывается?

+2

У вас нет. 'someclass object();' является объявлением функции, как и в этом учебнике. Это никогда не является экземпляром объекта. –

ответ

0

Вы можете использовать многословный способ строительства:

someclass object1 = someclass(); 

someclass object(); не будет вызывать, потому что компилятор считает, что это объявление функции, которая не принимает никаких аргументов и возвращает SomeClass экземпляр с.

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