2010-11-26 20 views
5
#include <iostream> 
#include <conio.h> 

using namespace std; 

class Base 
{ 
     int a; 
public: 
     Base(const Base & b) 
     { 
       cout<<"inside constructor"<<endl; 
     } 

}; 

int main() 
{ 
    Base b1; 
    getch(); 
    return 0; 
} 

Esto arroja un error. no hay función de coincidencia para llamar a `Base :: Base() ' ¿Por qué?¿Por qué el constructor de copias oculta el constructor predeterminado en C++?

+0

Eso no solucionará su problema, pero lo ideal es que su constructor de copia tome una referencia constante. –

+0

tienes razón. Lo arreglé – Bruce

Respuesta

8

El constructor predeterminado solo se genera si no declaras ningún constructor. Se supone que si está definiendo un constructor propio, también puede decidir si desea un constructor sin argumentos, y si es así definirlo también.

En C++ 0x, habrá una sintaxis explícita para decir que desea que el constructor por defecto:

struct Foo { 
    Foo() = default; 
    ... other constructors ... 
}; 
7

No ocultar el constructor por defecto, pero se declara ningún constructor en la clase inhibe la compilador de generar un constructor predeterminado, donde any incluye el constructor de copia.

La razón para inhibir la generación del constructor predeterminado si hay otro constructor presente se basa en el supuesto de que si necesita una inicialización especial en un caso, el constructor predeterminado generado implícitamente probablemente no sea apropiado.

Cuestiones relacionadas