Предполагая, что у нас есть класс TestClass
в нашем проекте C++. Конструктор по умолчанию - это один пустой список параметров. Таким образом, мы имеем:
TestClass();
TestClass(int defaultParam = 0);
Могут ли эти два быть конструкторами по умолчанию? И если они могут быть, этично ли иметь конструктор по умолчанию, как вторая строка?
Любой из
TestClass(void);
TestClass(int defaultParam=0);
может использоваться как конструктор по умолчанию. Когда у вас есть и то, и другое, это проблема, поскольку компилятор не может отличить эти два, когда компилятор должен использовать конструктор по умолчанию. Например
TestClass anObject;
TestClass objectArray[5];
Не связанный с вашим вопросом
По стилистическим причинам вы должны использовать:
TestClass();
вместо
TestClass(void);
Вторая форма поддерживается C++, но это необязательно. Тип аргумента void
необходим только при объявлении функций в C.
(void)
самом деле не идиома, скорее необходимость. int foo()
в C означает, что foo
принимает любое количество аргументов, поэтому foo(42)
компилирует, что плохо. Чтобы это исправить, вы пишете int foo(void)
чтобы foo(42)
не компилировалась. В C ++ int foo()
принимает аргументов, а foo(42)
не компилируется, поэтому void
- бесполезный шум.
имеющий более 1 конструктора, называется перегрузкой конструктора. Если есть два конструктора по умолчанию, он будет генерировать ошибку, поскольку компилятор не будет знать, какой конструктор должен вызывать при создании объекта. Если вы не объявляете конструктор по умолчанию, он выполняет его самостоятельно.