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) {}
), но как этот случай правильно обрабатывается?
У вас нет. 'someclass object();' является объявлением функции, как и в этом учебнике. Это никогда не является экземпляром объекта. –