Bonjour à tous,

prenons le code suivant:
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; }
};
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:
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?