Modifier de type d'un attribut dans la classe héritée - C++ - Programmation
Marsh Posté le 08-04-2013 à 02:58:15
Polymorphisme ?
Si j'ai bien compris, tu as ça :
Code :
|
Et tu veux faire ça :
Code :
|
Dans ce cas, tu changes monAttribut par un pointeur :
Code :
|
Et ensuite, par exemple dans le C-tor de B, tu fais :
Code :
|
D étant hérité de C, tu conserves les informations de D tout en considérant que c'est un type C, pour récupérer suffit de faire un static_cast (ou dynamic_cast, mais je pense que c'est plus approprié en statique).
Marsh Posté le 08-04-2013 à 16:08:55
Terminapor a écrit : Polymorphisme ? Si j'ai bien compris, tu as ça :
Et tu veux faire ça :
Dans ce cas, tu changes monAttribut par un pointeur :
Et ensuite, par exemple dans le C-tor de B, tu fais :
D étant hérité de C, tu conserves les informations de D tout en considérant que c'est un type C, pour récupérer suffit de faire un static_cast (ou dynamic_cast, mais je pense que c'est plus approprié en statique). |
Code :
|
Les pointeurs nus sont une faute de style
Marsh Posté le 08-04-2013 à 16:23:07
Ah, au temps pour moi j'ai toujours utilisé des pointeurs nus
Même pour faire un tableau dynamique (sans std::vector) vaut mieux utiliser std::unique_ptr / shared_ptr ?
Marsh Posté le 08-04-2013 à 17:03:39
Terminapor a écrit : Ah, au temps pour moi j'ai toujours utilisé des pointeurs nus |
C'est surtout que le chemin sur lequel tu diriges notre cher auteur original comporte quelques risques de leak (genre, j'initialise monAttribut en faisant un new dans A::A() et j'oublie de le libérer dans B::B() )
Les pointeurs nus ont de moins en moins de raisons d'être avec C++11. Quand tu manipules un pointeur, tu peux exprimer sa durée de vie directement dans le type, c'est beaucoup plus robuste et lisible.
Quand tu parles de tableau dynamique, si c'est C* = new C[12], je ne vois pas de raison de ne pas utiliser std::vector<C> à la place. Si c'est pour faire C** = new C*[12], alors je ne vois toujours pas de raison de ne pas utiliser std::vector<std::unique_ptr<C>> à la place (ou un autre pointeur riche quelconque)
Marsh Posté le 08-04-2013 à 00:43:30
Bonjour,
J'ai une classe mère A qui possède un attribut de type une classe C.
Et, j'ai une classe B qui hérite de la classe A. Je veux changer, dans B, le type de l'attribut à un type hérité de la classe C.
Comment je peux réussir ça?
Merci d'avance.