Bonjour
Dans le cas d'un dev professionnel, je dois r�aliser la conception suivante.
Nous avons une classe A de base, et une classe d�riv�e B.
Nous avons enfin une classe C, qui poss�de un attribut qui peut etre de type A ou de type B selon la valeur d'un param�tre.
Alors voila ce que j'ai fait. Toutes les critiques sont pour moi bonnes a prendre.
La classe B h�rite bien de A. La classe C poss�de en attribut un pointeur A. Mais ce pointeur peut avoir pour type dynamique le type B. La valeur du param�tre est pass� dans le constructeur. Il s'agit dans ce cas u. Si u vaut 1 alors elem est de type A, sinon il est de type B. D'un point de vue th�orique, cela me semble bien.
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
40
41
42
43
44
45 class A{ public: A(int u):a(u){}; A(){}; private: int a; }; class B:public A{ public: B(int x1,char* x2):A(x1),x(x2){}; char* getunChar(){ return x; } private: char* x; }; class C{ public: C(int i,char*); char* getChar(){ return ((B*)elem)->getunChar(); } private: A* elem; }; C::C(int u,char* chaine){ if(u==1) { elem =new A(1); } else { elem = new B(4,chaine); } } int main(){ char *x="ee"; C unobjet(2,x); std::cout<<unobjet.getChar(); }
Il faudrat bien sur dans le destructeur faire un delete de elem, ce que j'ai fait ici:
J'ai enfin une derni�re question. Pourquoi ne faut il pas faire ceci:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2 C::~C() { delete elem; }
Je vous rermercie pour votre aide.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10 C::C(int u,char* chaine){ if(u==1) { elem =&A(1); } else { elem = &B(4,chaine); } }




R�pondre avec citation









Partager