Bonjour,
Voici mon problème.
Je voudrais savoir comment gérer correctement les constructeurs de copies
et surcharge d'opérateurs "=" dans le cas 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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 class HybridFighter : public Path { protected : SFight* fighter; SMagic* magic1; public : HybridFighter(SFight* fighter,SMagic* magic1) { this->fighter=fighter; this->magic1=magic1; } virtual HybridFighter() { delete fighter; delete magic1; } }; int main() { SMagic *smagiclife=new SMagiclife(1,0,0,0); SMagic *smagicdeath=new SMagicdeath(1,0,0,0); SFight *pbowman=new SArchery(15,2,5,3); SFight *pwarrior=new SFighter(25,3,5,9); // Hop un archer + vie Path* player1=new SHybridFighter(pbowman,smagiclife); // Hop un paladin (guerrier + vie) Path* player2=new HybridFighter(pwarrior,smagiclife); // etc.. delete smagiclife; delete smagicdeath etc... };
Quelques précisions :
Path est une classe abstraite, factorisant tout ce qui est commun à chaque personnage.
Elle me permet donc de créer n'importe quelle type de personnage (cf les deux exemples du main()).
SFight et SMagic sont des classes abstraites dont dérivent :
- pour SFight : SArchery, SFighter, Sh2hFighter ... qui sont instanciables
- pour SMagic :SMagiclife, SMagicdeath, SMagicsorcery ... qui sont instanciables.
AUCUNE de ses classes ne comportent de pointeurs sur des types de base ni de classe.
Le programme SEMBLE marcher comme ceci, même sans constructeur de copie, ni opérateur "="
(tout est dans le "semble" ... LOL)
Voici donc mes deux questions :
- Qui doit gérer le/les constructeur(s) de copie? Les classes dont sont issues mes objets membres -même si ce sont des pointeurs de classes- ?
(dans ce cas, celui par défaut suffit). Sinon je ne vois pas comment faire.
C'est cette solution que j'ai choisie.
- Comment faire pour surcharger l'opérateur "=" (ou faire une méthode clone()), car même chose, je ne peux pas écrire SMagic *truc = new Magic() sans me faire rappeler que SMagic est abstraite.
Je vais en avoir besoin pour recréer mon objet quand un joueur meurt -entre autres-. Et là ben ...
c pas gagné.
Merci beaucoup
Partager