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 :

Polymorphisme Lien dynamique


Sujet :

C++

  1. #1
    Membre régulier
    Homme Profil pro
    .
    Inscrit en
    Octobre 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 174
    Points : 90
    Points
    90
    Par défaut Polymorphisme Lien dynamique
    Bonjour,

    Je souhaiterais faire du polymorphisme avec liens dynamique.
    Après un gros débat avec un collègue de stage nous en sommes arrivé à ce résultat (mini programme de test/intro ..)

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    #include <iostream>
    using namespace std;
     
    class vehicule {
    protected:
    	int roues;
    public:
    	vehicule(int r) : roues(r) {}
    	~vehicule();
    	virtual int get_roues()=0;
    	int print_nb_roues(){
    		this->get_roues();
    	}
    };
     
    class voiture: public vehicule {
    public:
    	voiture(int r) : vehicule(r) {}
    	~voiture();
    	int get_roues() {
    		return roues;
    	}
    };
     
    class moto: public vehicule {
    public:
    	moto(int r) : vehicule(r) {}
    	~moto();
    	int get_roues(){
    		return roues;
    	}
    };
     
    int get_nb_roues(vehicule &v)
    {
    	v.print_nb_roues();
    }
     
    int main() {
     
    	vehicule * v1 = new moto(2);
    	vehicule * v2 = new voiture(4);
     
    	cout << "Le vehicule v1 a :" << get_nb_roues(*v1) << endl; // prints !!!Hello World!!!
    	cout << "Le vehicule v2 a :" << v2->print_nb_roues() << endl;
    	return 0;
    }
    Or perso je ne suis pas d’accord car je pense que le destructeur doit être virtuel et je ne vois pas l’intérêt implémenter une fonction print_nb_roues() dans la classe mère.

    Merci pour vos conseils

  2. #2
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Bonjour,

    m'est avis que dans ce cas particulier, le destructeur n'a pas besoin d'être virtuel car il n'y a rien à détruire (la classe n'encapsule qu'un int). Cependant, ne pas déclarer le destructeur virtuel est de l'optimisation à priori. Concernant la méthode print_nb_roues, elle porte mal son nom : elle n'imprime rien.

    Ensuite je ne comprends pas l'intérêt de l'arbre d'héritage puisque la différence entre deux enfants de vehicule est entièrement déterminée par la construction des objets ; c'est-à-dire que moto(4) a plus de chose en commun avec voiture(4) qu'avec moto(2).
    -- Yankel Scialom

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 059
    Points : 12 095
    Points
    12 095
    Par défaut
    du polymorphisme avec liens dynamique
    Et en français, ça se dit comment.
    Là, c'est plus du fumeux qu'autre chose.

    je pense que le destructeur doit être virtuel
    Non, le destructeur ne doit être virtuel que quand cela est nécessaire.
    http://programmers.stackexchange.com...al-destructors

    Dans votre cas oui, mais il y a tout le reste, bien plus important : voir la loi des big five dans Google.

    > je ne vois pas l’intérêt implémenter une fonction print_nb_roues(
    Moi non plus vu que l'implémentation du NVI avec des méthodes virtuelles publiques et non protected casse tout le schéma du NVI.
    Ce n'est que cela n'a pas d'intérêt, c'est que cette mal fait : NVI + C++ dans Google ou dans la FAQ de ce site.

  4. #4
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Citation Envoyé par Hyssgrif Voir le message
    Or perso je ne suis pas d’accord car je pense que le destructeur doit être virtuel et je ne vois pas l’intérêt implémenter une fonction print_nb_roues() dans la classe mère.
    Ça me chagrine moins qu'une méthode virtuelle pure pour récupérer un attribut membre de la classe mère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class vehicule {
    protected:
    	int roues;
    public:
    //...
    	virtual int get_roues()=0; // Pourrait renvoyer "roues" (dont le nom laisse penser que ça renverra la liste des roues...)
    Pour ce qui est de "print_nb_roues", dans le cas où ça afficherait le nombre de roue, je dirais presque que ça n'a rien à faire dans l'interface de la classe... Le patron de conception visiteur permet de sortir ces fonctionnalités de la classe pour ne pas s retrouver avec 50 méthodes virtual sur la classe de base.

Discussions similaires

  1. liste deroulante : onselect +lien dynamique
    Par LFC dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/04/2005, 12h32
  2. [DisplayTag] Créer un lien dynamique avec javascript
    Par babylone7 dans le forum Taglibs
    Réponses: 3
    Dernier message: 20/04/2005, 11h23
  3. [Débutant] Pb avec les paramètres dans lien dynamique
    Par hackwell69 dans le forum Struts 1
    Réponses: 2
    Dernier message: 21/02/2005, 12h33
  4. [DisplayTag] Comment créer un lien dynamique
    Par tscoops dans le forum Taglibs
    Réponses: 3
    Dernier message: 17/02/2005, 10h53
  5. [Javascript] Suppression de lien dynamique
    Par Invité4 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/01/2005, 11h36

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