Bonjour

j'ai ete recemment confronte au morceau de code ci-dessous et je peine a comprendre ce qui se passe reellemment.

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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
 
using namespace std;
 
class A {
protected:
	int m_x, m_y;
public:
	A(int x, int y) : m_x(x), m_y(y) {
		cout << "Constructeur de A : " << m_x << " " << m_y << endl;
	}
};
 
class B : public virtual A {
public:
	B(int x, int y) : A(2*x+1, 2*y+1) {
		cout << "Constructeur de B : " << m_x << " " << m_y << endl;
	}
};
 
class C : public virtual A {
public:
	C(int x, int y) : A(2*x+3, 2*y+3) {
		cout << "Constructeur de C : " << m_x << " " << m_y << endl;
	}
};
 
class D : public B, public C {
public:
	D(int x, int y) : B(x+1, y+1), C(x+2, y+2), A(x, y) {
		cout << "Constructeur de D : " << m_x << " " << m_y << endl;
	}
};
 
int main() {
	D d(1, 2);
	system("pause");
	return 0;
}
La sortie est la suivante :

Constructeur de A : 1 2
Constructeur de B : 1 2
Constructeur de C : 1 2
Constructeur de D : 1 2
Appuyez sur une touche pour continuer...
tout se passe comme si seul le constructeur de A etait appele mais, pourtant, on passe bien dans les constructeurs de B, C et D comme le montrent les sorties

quelqu'un peut m'eclairer sur la question ?

merci d'avance