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 :

Différentes créations de classes : héritage ou pas


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 140
    Par défaut Différentes créations de classes : héritage ou pas
    Bonjour,

    voici une question que je me pose sur un projet actuel.
    Je dois créer deux classes variables : une classe "VariableInteger" et une classe "VariableDouble" qui doivent, outre contenir chacune leur attribut de la variable (int pour "VariableInteger" et double pour "VariableDouble"), aussi contenir un attribut du nom de la variable (std::string).

    Je pense à deux manières pour définir cela :

    1 : je crée une classe mère "Variable" ne contenant comme attribut que le nom de la variable, puis je crée les deux classes "VariableInteger" et "VariableDouble" qui héritent de la classe "Variable"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    class Variable
    {
    	std::string m_name;
     
    	/* les méthodes qui vont bien */
    };
     
    class VariableInteger : public Variable
    {
    	int m_value;
     
    	/* les méthodes qui vont bien */
    };
     
    class VariableDouble : public Variable
    {
    	double m_value;
     
    	/* les méthodes qui vont bien */
    };
    2 : je crée uniquement les deux classes "VariableInteger" et "VariableDouble" qui ont chacune leur attribut de la variable (int pour "VariableInteger" et double pour "VariableDouble") ainsi que l'attribut supplémentaire du nom de la variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    class VariableInteger
    {
    	int m_value;
    	std::string m_name;
     
    	/* les méthodes qui vont bien */
    };
     
    class VariableDouble
    {
    	double m_value;
    	std::string m_name;
     
    	/* les méthodes qui vont bien */
    };
    Je ne vois pas spécifiquement la différence fondamentale (lors de l'exécution finale du logiciel créé) entre ces deux manières et je n'ai pas trouvé de réponse précise à cette question.

    Merci beaucoup.

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Par défaut
    Je ne suis pas expert mais je pense que si ta classe mère n'est pas plus développée que ça : il vaut mieux privilégier la seconde méthode.

    Corrigez moi les autres si je me trompe

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 140
    Par défaut
    Certes la classe "Variable" ne contient que ce seul attribut du nom et les méthodes get et set qui vont bien.
    Mais qu'elle sera justement la différences ?

  4. #4
    Membre chevronné
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Par défaut
    Utiliser l'héritage juste pour ça me parait compliqué. Tu es sûr que tu ne peux pas utiliser un template ?

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 140
    Par défaut
    Citation Envoyé par phi1981 Voir le message
    Utiliser l'héritage juste pour ça me parait compliqué. Tu es sûr que tu ne peux pas utiliser un template ?
    Je peux utiliser ce que je veux.
    Néanmoins une petite explication sur la complication de l'utilisation (beaucoup de "ion" ) de l'héritage me serait utile.

  6. #6
    Membre chevronné
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Par défaut
    Néanmoins une petite explication sur la complication de l'utilisation (beaucoup de "ion" ) de l'héritage me serait utile.
    Oh là je suis vraiment pas la personne la mieux indiquée, mais personnellement je préfère éviter l'héritage et plutôt favoriser la composition.
    Dans le cas de tes variables, l'idée d'avoir deux classes dérivées, une pour chaque type (si j'ai bien compris le but), est intéressante. Mais dans la pratique, à un moment, tu vas avoir un pointeur vers une "Variable", et même si tu sais que c'est un Int qu'elle contient, tu vas être bloqué parce qu'il te faudra faire un dynamic_cast ou un static_cast pour accéder à l'Int, ce qui est horrible.

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 140
    Par défaut
    Citation Envoyé par phi1981 Voir le message
    Oh là je suis vraiment pas la personne la mieux indiquée, mais personnellement je préfère éviter l'héritage et plutôt favoriser la composition.
    Dans le cas de tes variables, l'idée d'avoir deux classes dérivées, une pour chaque type (si j'ai bien compris le but), est intéressante. Mais dans la pratique, à un moment, tu vas avoir un pointeur vers une "Variable", et même si tu sais que c'est un Int qu'elle contient, tu vas être bloqué parce qu'il te faudra faire un dynamic_cast ou un static_cast pour accéder à l'Int, ce qui est horrible.
    Merci beaucoup de ta réponse.

Discussions similaires

  1. Réponses: 8
    Dernier message: 13/11/2006, 16h45
  2. Erreur : La classe n'est pas enregistrée
    Par Le Pharaon dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 11/08/2005, 12h04
  3. héritage ou pas??
    Par neonico dans le forum C++
    Réponses: 1
    Dernier message: 24/11/2004, 10h51
  4. Erreur : La classe ne gère pas Automation..
    Par Invité dans le forum VBA Access
    Réponses: 1
    Dernier message: 09/09/2004, 10h24
  5. Réponses: 4
    Dernier message: 15/01/2004, 22h53

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