appeler le constructeur par défaut
class base {
int i;
public:
base()
{
i = 10;
cout << "in the constructor" << endl;
}
};
int main()
{
base a;//here is the point of doubt
getch();
}
Quelle est la différence entre base a
et base a()
?
dans le premier cas, le constructeur est appelé, mais pas dans le second cas!
OriginalL'auteur Vijay | 2011-03-14
Vous devez vous connecter pour publier un commentaire.
La seconde est la déclaration d'une fonction a() qui renvoie un objet de base. 🙂
OriginalL'auteur Bo Persson
base a
déclare une variablea
de typebase
et appelle son constructeur par défaut (en supposant que ce n'est pas un builtin type).base a();
déclare une fonctiona
qui ne prend aucun paramètre et renvoie typebase
.La raison pour cela est parce que la langue fondamentalement spécifie qu'en cas d'ambiguïté, comme ce quelque chose qui peut être analysée comme une déclaration de fonction doit être analysée. Vous pouvez rechercher pour "C++ plus délicate à analyser" pour une même situation plus compliquée.
À cause de cela, je préfère
new X;
surnew X();
car il est conforme à la non-déclaration.OriginalL'auteur Mark B
En C++, vous pouvez créer un objet dans les deux sens:
La première utilise la déclaration suivante :
L'objet est supprimé dès que de sortir de la portée actuelle.
La version dynamique utilise un pointeur, et vous avez la charge pour le supprimer :
base * a = new base()
??Est-ce la réponse pertinente à la question? Vous n'avez pas d'adresse
base b()
OriginalL'auteur M'vy