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 ![[:aloy] [:aloy]](https://forum-images.hardware.fr/images/perso/aloy.gif) 
 
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.