Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1575 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Modifier de type d'un attribut dans la classe héritée

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Modifier de type d'un attribut dans la classe héritée

n°2184662
kochfet
Posté le 08-04-2013 à 00:43:30  profilanswer
 

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.

mood
Publicité
Posté le 08-04-2013 à 00:43:30  profilanswer
 

n°2184664
Terminapor
I'll see you rise.
Posté le 08-04-2013 à 02:58:15  profilanswer
 

Polymorphisme ?  
 
Si j'ai bien compris, tu as ça :  

Code :
  1. class A
  2. {
  3.   protected:
  4.    C monAttribut;
  5. };


 
Et tu veux faire ça  :
 

Code :
  1. class B : public A
  2. {
  3.   protected:
  4.    D monAttribut; // Avec D hérité de C
  5. };


 
Dans ce cas, tu changes monAttribut par un pointeur :  
 

Code :
  1. class A
  2. {
  3.   protected:
  4.    C* monAttribut;
  5. };


 
Et ensuite, par exemple dans le C-tor de B, tu fais :  

Code :
  1. monAttribut = new D(...);


 
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).


---------------
Perhaps you don't deserve to breathe
n°2184760
theshockwa​ve
I work at a firm named Koslow
Posté le 08-04-2013 à 16:08:55  profilanswer
 

Terminapor a écrit :

Polymorphisme ?

 

Si j'ai bien compris, tu as ça :

Code :
  1. class A
  2. {
  3.   protected:
  4.    C monAttribut;
  5. };
 

Et tu veux faire ça  :

 
Code :
  1. class B : public A
  2. {
  3.   protected:
  4.    D monAttribut; // Avec D hérité de C
  5. };
 

Dans ce cas, tu changes monAttribut par un pointeur :

 
Code :
  1. class A
  2. {
  3.   protected:
  4.    C* monAttribut;
  5. };
 

Et ensuite, par exemple dans le C-tor de B, tu fais :

Code :
  1. monAttribut = new D(...);
 

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 :
  1. class A
  2. {
  3.   protected:
  4.    std::unique_ptr<C> monAttribut;
  5. };
 

Les pointeurs nus sont une faute de style [:aloy]


Message édité par theshockwave le 08-04-2013 à 16:09:19

---------------
last.fm
n°2184766
Terminapor
I'll see you rise.
Posté le 08-04-2013 à 16:23:07  profilanswer
 

Ah, au temps pour moi j'ai toujours utilisé des pointeurs nus :D  
 
Même pour faire un tableau dynamique (sans std::vector) vaut mieux utiliser std::unique_ptr / shared_ptr ?
 


---------------
Perhaps you don't deserve to breathe
n°2184775
theshockwa​ve
I work at a firm named Koslow
Posté le 08-04-2013 à 17:03:39  profilanswer
 

Terminapor a écrit :

Ah, au temps pour moi j'ai toujours utilisé des pointeurs nus :D  
 
Même pour faire un tableau dynamique (sans std::vector) vaut mieux utiliser std::unique_ptr / shared_ptr ?
 


 
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)


---------------
last.fm

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Modifier de type d'un attribut dans la classe héritée

 

Sujets relatifs
Comment modifier ce script de redirection d'urlErreur d execution 432 nom du fichier ou de la classe introuvable lors
Passer un code flash sur une classe externe ASProblème pour modifier une fonction
Générer automatiquement la valeur de l'attribut "src"Copie d'une ArrayList d'une classe vers une autre
javascript : besoin de modifier une iframe crossDomainVariable de type texte Access
[Java/ANT] Chercher des classes d'un type précisModifier format fichier xml
Plus de sujets relatifs à : Modifier de type d'un attribut dans la classe héritée


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR