Bonjour, je souhaite implémenter un héritage en diamant avec 3 classes de bases abstraites plus une classe normale. Le problème et que je n'arrive pas à mettre en place des attributs communs à toutes les classes.
Pour être plus clair, j'ai imaginé un petit exemple :
Voila mon code, qui ne compile pas :
Comment dois-je faire pour implémenter correctement ce type de structure ? Comment mettre en place des attributs communs aux classes filles ?
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 #ifndef _PERSONNAGE_H_ #define _PERSONNAGE_H_ class Personnage { public: Personnage(string nom) : nom(nom) {} virtual ~Personnage() {} virtual string getNom() = 0; protected: string nom; }; #endif #ifndef _PERSOCOURAGEUX_H_ #define _PERSOCOURAGEUX_H_ class PersoCourageux : virtual public Personnage { public: PersoCourageux(string nom, int ptsDeCourage) : Personnage(nom), ptsDeCourage(ptsDeCourage) {} virtual ~PersoCourageux() {} virtual string getNom() = 0; virtual string getPtsDeCourage() { return ptsDeCourage; } private: int ptsDeCourage; }; #endif #ifndef _PERSOFORT_H_ #define _PERSOFORT_H_ class PersoFort : virtual public Personnage { public: PersoFort (string nom, int ptsDeForce) : Personnage(nom), ptsDeForce(ptsDeForce) {} virtual ~PersoFort () {} virtual string getNom() = 0; virtual string getPtsDeForce() { return ptsDeForce; } private: int ptsDeForce; }; #endif #ifndef _GUERRIER_H_ #define _GUERRIER_H_ class Guerrier : public PersoCourageux, public PersoFort { public: Guerrier(string nom, int ptsDeCourage, int ptsDeForce) : ptsDeCourage(nom, ptsDeCourage), PersoFort (nom, ptsDeForce) {} string getNom() { return this->nom; } }; #endif
Partager