Salut tout le monde,
J'ai un probl�me en ce qui concerne l'h�ritage. J'ai une classe m�re CServer et une classe fille CBackup et j'ai besoin de convertir CServer en CBackup.
Est ce possible?
Merci d'avance.
Salut tout le monde,
J'ai un probl�me en ce qui concerne l'h�ritage. J'ai une classe m�re CServer et une classe fille CBackup et j'ai besoin de convertir CServer en CBackup.
Est ce possible?
Merci d'avance.
Que veux-tu dire EXACTEMENT par "convertir CServer en CBackup" ?
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
En fait, j'ai une troisi�me classe (COther) qui contient la classe CServer. La classe COther contier une fonction qui selon le type du serveur (Master ou backup) doit pouvoir acc�der aux membres de la classe CServer et de la classe CBackup.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10 Class COther { public: CServer Server; int ServerType; public: COther(CServer *server); int MyFunction(); }
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12 int COther::MyFunction() { if(ServerType == 1) { //Some code } else { //Ici je dois pouvoir accèder à des membres de la classe fille } }
Comment puis je faire cela?
Si tu es s�r de ton coup, un simple static_cast< CBackup * >(Server) suffit.
Sinon, tu peux utiliser un dynamic_cast et v�rifier que le pointeur retourn� n'est pas NULL.
PS: Cela ressemble fort � une erreur de conception. Pourquoi ne pas utiliser une fonction membre virtuelle dans CServer et CBackup ?
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Je vais essayer la m�thode que tu as propos�.
En fait, je peux �liminer la troisi�me classe, elle pr�sente d'autres fonctionnali�s et c'est tout une autre histoire.
�a marche, merci.
Tu pourrais m'expliquer, c quoi au juste cette commande?
Pour �a, je me vois oblig� de te dire de relire ton cours de C++ : Les op�rateurs de forcage de type font partie du langage lui-m�me.
Ce que je peux dire, c'est qu'il y en a des plus permissifs que d'autres, notamment pour convertir un pointeur en un autre.
- Le cast de type C ("C-Style cast") et son extension C++ ("Function-Style cast") sont les plus permissifs: ils permettent de convertir tout en n'importe quoi : Flottant en entier, entier en pointeur, pointeur d'un type � l'autre, pointeur const en non-const, etc.
- Le static_cast est le moins permissif: Il permet de convertir les types d'entiers entre eux, il peut convertir un void* en (n'importe quel type)*, ou un CBase* en CDerivee * (la conversion dans l'autre sens �tant implicite et n'ayant donc pas besoin de cast). On ne peut PAS convertir un pointeur const en pointeur non-const.
- Le dynamic_cast ne peut (ou ne doit) s'utiliser que sur des pointeurs d'objets: Il sert justement � convertir un CBase* en CDerivee* (ou d'autres conversions du m�me tonneau) mais retourne un pointeur NULL si l'objet point� n'est pas du bon type. C'est un peu plus lent qu'un static_cast, par contre.
- Le reinterpret_cast est plus permissif que le static_cast, je crois qu'il permet toutes les conversions SAUF pointeur const en pointeur non-const.
- Le const_cast permet de convertir un pointeur const en pointeur non-const. Son utilisation doit rester exceptionnelle, surtout pour un d�butant.
Pour �viter les erreurs, on utilise les op�rateurs les moins permissifs possibles. Quand on programme en C++, le cast de type C est � bannir.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Je me rappelle avoir lu �a quelque partmerci bcp
![]()
Partager