2017-10-16 15 views
0

Peut-être que je pose mal ma question à Google, mais je ne trouve pas de réponse à mon problème. Mon problème est que mon constructeur hérité appelle mon constructeur de base par défaut et je ne comprends pas pourquoi. Voici ma version simplifiée.Pourquoi mon constructeur hérité appelle mon constructeur par défaut

Exemple:

A.cpp

#include <iostream> 
#include "A.h" 

using namespace std; 

A::A() 
{ 
    cout << "A" << endl; 
} 

B.cpp

#include <iostream> 
#include "B.h" 

using namespace std; 

B::B() 
{ 
    cout << "B" << endl; 
} 

B::B(int x) 
{ 
    cout << "B" << x << endl; 
} 

Source.cpp

#include <iostream> 
#include "A.h" 
#include "B.h" 

using namespace std; 

int main() { 
    B * b = new B(); 
    cout << "---" << endl; 
    B * b2 = new B(2); 

    system("PAUSE"); 
    return 0; 
} 

sortie:

A 
B 
--- 
A 
B2 
Press any key to continue . . . 

Je veux juste voir ce que fait le constructeur B. Comme ceci:

B 
--- 
B2 
Press any key to continue . . . 
+1

Avez-vous un constructeur hérité ici? Aussi, pour construire avec succès un objet de type 'B' vous devez aussi appeler le ctor de' A' ... –

+6

On dirait que vous devriez revisiter un [bon livre C++] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) Vous devez toujours construire la partie de base d'une classe dérivée. – NathanOliver

+1

Vous n'avez pas montré la définition de vos classes et vous n'avez pas déclaré à droite que 'B' dérive de' A'. Je suppose que nous pouvons déduire l'héritage du titre de la question et de la sortie fournie. –

Répondre

1

Parce que la classe parente pourrait être responsable, par ex. initialisation des variables membres (y compris l'allocation potentielle de la mémoire) dont dépend la sous-classe.

+2

Les constructeurs n'allouent pas le stockage où l'objet actuel est initialisé. Ce que vous vouliez dire n'est résumé que par l'initialisation des variables membres. – StoryTeller