2011-07-21 25 views
5

Tengo una pregunta: ¿qué constructor se usa cuando se crea una instancia de una clase con ClassName instance() en C++?Creando una instancia de una clase con()

Ejemplo:

#include <iostream> 

using namespace std; 

class Test 
{ 
private: 
    Test() 
    { 
     cout << "AAA" << endl; 
    } 

public: 
    Test(string str) 
    { 
     cout << "String = " << str << endl; 
    } 
}; 

int main() 
{ 
    Test instance_1(); // instance_1 is created... using which constructor ? 
    Test instance_2("hello !"); // Ok 

    return 0; 
} 

Gracias!

Respuesta

11

Tricky! Es de esperar que la compilación falle, ya que el constructor predeterminado es privado. Sin embargo, compila y no se crea nada. ¿La razón?

Test instance_1(); 

... ¡es solo una declaración de función! (Que devuelve Test y toma nada.)

+3

Eso es lo que iba a decir, pero me ganaste. Este es el análisis más fastidioso de C++ (http://en.wikipedia.org/wiki/Most_vexing_parse). –

+0

most vexing parse es un nombre muy apropiado. y las preguntas bajo esta etiqueta http://stackoverflow.com/questions/tagged/most-vexing-parse son una excelente prueba. – tomasz

6

La declaración Test instance_1(); no llama a un constructor en absoluto, porque no es la definición de una variable - en su lugar, se declara una función llamada instance_1 que devuelve un objeto de tipo Test. Para crear una instancia usando el constructor de 0 argumentos, usaría Test instance_1;.

+0

O la nueva sintaxis de C++ 0x -> Test instance_1 {}; – David

Cuestiones relacionadas