IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Changer le type d'un attribut de la classe mère dans la classe fille


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 188
    Points : 51
    Points
    51
    Par défaut Changer le type d'un attribut de la classe mère dans la classe fille
    Bonjour,

    Peut on changer le type d'un attribut d'une classe mère dans sa classe fille sachant que le type de cet attribut est une troisième classe et le type qu'on veut avoir pour cet attribut dans la classe fille est une classe dérivée de cette troisième classe? Si oui comment?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class A
    {
    Cmère attr;
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class B:public A
    {
    Cfille attr;
    }
    Merci d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 128
    Points : 33 049
    Points
    33 049
    Billets dans le blog
    4
    Par défaut
    Bonsoir,

    non tu ne peux pas "changer" son type.
    Mais comme pour les méthodes, tu peux le redéfinir.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    struct A { int i;};
    struct B : A { std::string i;};
    	A a;
    	a.i = 0;
    	B b;
    	b.i = "test";
    	b.A::i = 5;
    Mais c'est un besoin pour le moins farfelu.

  3. #3
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 745
    Points : 3 660
    Points
    3 660
    Par défaut
    En passant par un pointeur/référence. La classe B créer une instance Cfille et l'envoi à A. Du coup les classes dérivant de B sont chargées de créer l'objet, ce qui n'en fait pas une solution idéal.

  4. #4
    Membre émérite Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 047
    Points : 2 251
    Points
    2 251
    Par défaut
    Bonjour,

    Avant tout.... Pourquoi vouloir réaliser une telle chose? Si tu as des attributs différent alors la classe n'est pas la même.

    Si tu veux faire une généralisation -> spécialisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Type{};
    class A{ Cmère value};
    class B{Cfille value};
     
    Type myobj = new B();

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 581
    Points
    41 581
    Par défaut
    Sans regard pour le fait que ce soit une bonne idée ou non, ce doit être possible avec du CRTP.
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    template< class T > 
    class A
    {
    	T::attr_type attr;
    };
     
    class B : public A<B>
    {
    public:
    	typedef Cfille attr_type;
    };

  6. #6
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Citation Envoyé par Bousk Voir le message
    non tu ne peux pas "changer" son type.
    Mais comme pour les méthodes, tu peux le redéfinir.
    Non, la redéfinition est impossible: on ne peut pas le supplanter. (redéfinir == to override)
    Ce que tu décris est un masquage: ajout d'un nouvel attribut qui empêche l'accès à l'attribut parent depuis le contexte de la classe fille, et vice versa (ajout <=> il y en a deux dans la classe fille)

Discussions similaires

  1. changer le type d'un attribut
    Par diememoise2011 dans le forum EDI et Outils pour Java
    Réponses: 1
    Dernier message: 29/11/2011, 10h29
  2. Réponses: 0
    Dernier message: 22/11/2011, 20h36
  3. Réponses: 7
    Dernier message: 01/01/2010, 08h31
  4. Réponses: 9
    Dernier message: 26/11/2007, 09h50
  5. changer le type d'un attribut dans une base oracle 8i
    Par vrossi59 dans le forum Oracle
    Réponses: 3
    Dernier message: 24/02/2006, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo