Constructores predeterminados en C ++

si tengo constructores con parámetros en mi clase, necesitamos proporcionar un constructor que no haga nada como:

1)

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

solo para satisfacer al compilador.

Ahora, si mi clase tiene un parámetro predeterminado como:

2)

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

Va a haber una ambigüedad si llamar a A: :() o A :: A (int = 0) por lo que no podemos proporcionar ningún constructor de no hacer nada en el segundo caso. Entonces, es cierto que incluso el constructor implícito proporcionado por el compilador se suprime en este caso.

Proporcione algunas aclaraciones / pensamientos.

preguntado el 10 de mayo de 11 a las 14:05

Tenga en cuenta que no necesita especificar un constructor de cero argumentos para "satisfacer al compilador". -

¡La programación nunca se trató de satisfacer al compilador! -

No es necesario tener un constructor predeterminado para satisfacer al compilador. Necesita tener uno si va a hacer algo que requiera un constructor predeterminado, algo como A a; or A b[10]; or A * c = new A[10];. No es necesario que una clase tenga un constructor predeterminado. -

parece que el libro que estaba leyendo hace minutos tiene errores, tenía esas palabras ... para satisfacer al compilador ... Gracias por dejarme saber todo esto -

3 Respuestas

Un constructor sin parámetros, o un constructor donde todas los parámetros tienen un valor predeterminado, is el construcor predeterminado.

El compilador no generará uno si lo ha proporcionado.

No tiene que proporcionar un constructor predeterminado si eso no tiene sentido para su tipo. Por supuesto, eso prohíbe el uso de su clase en lugares donde se necesita un constructor predeterminado, pero tal uso probablemente tampoco tenga sentido.

contestado el 10 de mayo de 11 a las 18:05

El compilador solo genera un ctor predeterminado si no define uno explícitamente. Entonces, si define un ctor, el compilador no generará un ctor para la clase.

contestado el 10 de mayo de 11 a las 18:05

Y no importa cuántos parámetros, predeterminados o no, tenga su ctor, el compilador no generará uno si especifica alguno (aparte de copiar y mover ctor). - Xeo

Si necesita deshabilitar explícitamente el uso de un constructor, puede hacerlo private a la clase.

Tenga en cuenta que el compilador no debería quejarse de que no proporcione un constructor. En el momento en que proporcione uno, y solo uno, debería automáticamente detener proporcionando el constructor predeterminado

contestado el 10 de mayo de 11 a las 18:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.