Bonjour à tous,
prenons le code suivant:
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?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; } };
Pour info, le code ci-dessus, lors d'une création d'une instance de Fille, donne l'output suivant:
Et question subsidiaire, pourquoi si dans la classe Pere, on déclare f() comme virtuelle pure, ça ne compile même pas?ctor pere
f() pere
ctor fille
Partager