2011-03-14 20 views
12
class base { 
    int i; 
public: 
    base() 
    { 
     i = 10; 
     cout << "in the constructor" << endl; 
    } 
}; 

int main() 
{ 
    base a;// here is the point of doubt 
    getch(); 
} 

¿Cuál es la diferencia entre base a y base a()?llamando al constructor predeterminado

¡en el primer caso se llama al constructor pero no en el segundo caso!

Respuesta

18

El segundo es declarar una función a() que devuelve un objeto base. :-)

11

base a declara una variable a de tipo base y llama a su constructor predeterminado (suponiendo que no es un tipo incorporado).

base a(); declara una función a que no toma ningún parámetro y devuelve el tipo base.

La razón de esto es porque el lenguaje básicamente especifica que en casos de ambigüedad como este todo lo que se puede analizar como una declaración de función debe ser analizado. Puede buscar "C++ más irritante análisis" para una situación aún más complicada.

Debido a esto, realmente prefiero new X; sobre new X(); porque es consistente con la declaración no nueva.

-1

En C++, puede crear el objeto en dos vías:

  1. automática (estática)
  2. dinámico

El primero utiliza la siguiente declaración:

base a; //Uses the default constructor 
base b(xxx); //Uses a object defined constructor 

El objeto se elimina tan pronto como se sale del alcance actual.

La versión dinámica utiliza puntero, y usted tiene la carga de eliminarlo:

base a = new base(); //Creates pointer with default constructor 
base b = new base(xxx); //Creates pointer with object defined constructor 

delete a; delete b; 
+1

Shouldnt sea 'base * a = nueva base()' ?? – Sid

+4

¿Es esta respuesta realmente relevante para la pregunta? No se dirigió a 'base b()' – narengi

Cuestiones relacionadas