Конструкторы по умолчанию в C ++ - PullRequest
1 голос
/ 10 мая 2011

если у меня есть конструкторы с параметрами в моем классе, нам нужно предоставить конструктор, который ничего не делает, например:

1)

class A
{
  A(){};  //To satisfy the compiler
  //some constructors with parameter
};

только для удовлетворения компилятора.

Теперь, если у моего класса есть параметр по умолчанию, например:

2)

class A
{
//A(){} can't be used expilcilty or implicilty
A(int = 0);
};
A a;

Будет двусмысленность, вызывать ли A: :() или A :: A (int = 0), поэтому во втором случае мы не можем предоставить конструктор, который ничего не делает. Поэтому верно ли, что даже неявный конструктор, предоставляемый компилятором, в этом случае исключается.

Пожалуйста, предоставьте некоторые разъяснения / мысли.

Ответы [ 3 ]

6 голосов
/ 10 мая 2011

Конструктор без параметров или конструктор, в котором все параметры имеют значение по умолчанию, равно конструктор по умолчанию.

Компилятор не сгенерирует его, если вы его предоставили.

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

3 голосов
/ 10 мая 2011

Компилятор генерирует ctor по умолчанию, только если вы не определили его явно. Поэтому, если вы определите ctor, компилятор не сгенерирует ctor для класса.

1 голос
/ 10 мая 2011

Если вам нужно явно отключить использование конструктора, вы можете сделать его private для класса.

Обратите внимание, что компилятор не должен сожалеть о том, что вы не предоставляете конструктор. В ту минуту, когда вы предоставляете один - и только один - он должен автоматически останавливаться , предоставляя конструктор по умолчанию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...