héritage et appel de fonction dans constructeur
Bonjour à tous,
prenons le code suivant:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class Pere
{
public:
Pere(){
cout << "ctor pere" << endl;
f();
}
virtual void f() { cout << "f() pere" << endl; }
};
class Fille: public Pere
{
public:
Fille() { cout << "ctor fille" << endl; }
void f() { cout << "f() fille" << endl; }
}; |
Nous voyons que dans le constructeur de Pere, la fonction f() est appelée. Pourquoi, lorsqu'on crée un objet fille (Fille fille; ), c'est la fonction f() du père qui est appelé dans le constructeur de Pere, et pas la fonction f() de la classe Fille? Normalement, le compilo "sait" qu'il est en train d'instancier une classe Fille, pourquoi alors appelle-t-il la fonction f() de Père?
Pour info, le code ci-dessus, lors d'une création d'une instance de Fille, donne l'output suivant:
Citation:
ctor pere
f() pere
ctor fille
Et question subsidiaire, pourquoi si dans la classe Pere, on déclare f() comme virtuelle pure, ça ne compile même pas?