2010-11-26 7 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; 
} 

Cela donne une erreur. pas de fonction correspondante pour l'appel de `Base :: Base() ' Pourquoi?Pourquoi le constructeur de copie masque-t-il le constructeur par défaut en C++?

+0

Cela ne résoudra pas votre problème, mais idéalement, votre constructeur de copie devrait prendre une référence const. –

+0

vous avez raison. Je l'ai corrigé – Bruce

Répondre

8

Le constructeur par défaut n'est généré que si vous ne déclarez aucun constructeur. Il est supposé que si vous définissez votre propre constructeur, vous pouvez également décider si vous voulez un constructeur sans-args, et si c'est le cas, définissez-le aussi.

En C++ 0x, il y aura une syntaxe explicite pour dire que vous voulez que le constructeur par défaut:

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

Il n'a pas cacher le constructeur par défaut, mais la déclaration de tout constructeur dans votre classe inhibe la compilateur de générer un constructeur par défaut, où inclut le constructeur de copie. La logique d'inhibition de la génération du constructeur par défaut si un autre constructeur est présent est basée sur l'hypothèse que si vous avez besoin d'une initialisation spéciale dans un cas, le constructeur implicite généré par défaut est probablement inapproprié.

Questions connexes