Конструктор по умолчанию для класса [duplicate]

0

Предполагая, что у нас есть класс TestClass в нашем проекте C++. Конструктор по умолчанию - это один пустой список параметров. Таким образом, мы имеем:

TestClass();
TestClass(int defaultParam = 0);

Могут ли эти два быть конструкторами по умолчанию? И если они могут быть, этично ли иметь конструктор по умолчанию, как вторая строка?

  • 4
    Вы пытались его скомпилировать?
  • 0
    С уважением, нет. Я считаю это гипотетической ситуацией. Также, если я хорошо знаю, компилятор предупредит вас о такой ситуации, только если вам нужно инициализировать класс конструктором по умолчанию.
Показать ещё 5 комментариев
Теги:
class
constructor
default-constructor

2 ответа

2

Любой из

TestClass(void);
TestClass(int defaultParam=0);

может использоваться как конструктор по умолчанию. Когда у вас есть и то, и другое, это проблема, поскольку компилятор не может отличить эти два, когда компилятор должен использовать конструктор по умолчанию. Например

TestClass anObject;
TestClass objectArray[5];

Не связанный с вашим вопросом

По стилистическим причинам вы должны использовать:

TestClass();

вместо

TestClass(void);

Вторая форма поддерживается C++, но это необязательно. Тип аргумента void необходим только при объявлении функций в C.

  • 0
    Вот почему я спросил, потому что я собирался иметь их обоих.
  • 5
    (void) самом деле не идиома, скорее необходимость. int foo() в C означает, что foo принимает любое количество аргументов, поэтому foo(42) компилирует, что плохо. Чтобы это исправить, вы пишете int foo(void) чтобы foo(42) не компилировалась. В C ++ int foo() принимает аргументов, а foo(42) не компилируется, поэтому void - бесполезный шум.
Показать ещё 7 комментариев
0

имеющий более 1 конструктора, называется перегрузкой конструктора. Если есть два конструктора по умолчанию, он будет генерировать ошибку, поскольку компилятор не будет знать, какой конструктор должен вызывать при создании объекта. Если вы не объявляете конструктор по умолчанию, он выполняет его самостоятельно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню