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 :

[fonctions virtuelles] appel de fonctions de la classe mere


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut [fonctions virtuelles] appel de fonctions de la classe mere
    (re) bonjour à tous!
    Suite à la discussion lancée par moi-même : http://www.developpez.net/forums/sho...64&postcount=1
    J'aimerai avoir votre avis sur le type de comportement à mettre dans ce cas un peu particulier d'héritage:


    J'ai la classe C qui dérive de la classe B, qui elle même dérive de A (abstraite)

    La fonction membre A::test() ne convenant pas dans C, il faut la réimplémenter : B::test().
    Par contre, pour ma classe C, l'implémentation de la classe mère A est correcte.

    Y a t-il un choix judicieux à faire? i.e. déclarer test() comme virtuelle, virtuelle pure, ou bien ne rien déclarer du tout? La fonction test() utilisée dans la classe C pourrait elle naturellement appeler la fonction membre déclarer dans la classe mère abstraite A???

    Encore merci pour vos réponses !

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    La fonction test() utilisée dans la classe C pourrait elle naturellement appeler la fonction membre déclarer dans la classe mère abstraite A???
    Oui. Mais bon ça paraît bizarre comme situation. Tu peux expliquer un peu pourquoi le comportement par défaut n'est pas bon dans B mais l'est dans C ?

  3. #3
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Oui bien sûr...
    Une bonne partie de l'explication est sur http://www.developpez.net/forums/sho...d.php?t=287988

    J'ai deux classes qui dérivent de A en fait, comme sur le diagramme des classes joint au post ci dessus...
    En gros, la classe C est une partie de la classe B... Tout est pareil, sauf que la classe n'est consituée que d'une seule image infrarouge, alors que B de deux images infrarouges.... (cf post ci précedemment cité)

    Cette modélisation est mûrement réféchie, et je pense correcte!

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    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 296
    Par défaut
    C'est louche. Tu parles de contenance et pourtant tu hérites.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  5. #5
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Luc Hermitte
    C'est louche. Tu parles de contenance et pourtant tu hérites.
    J'ai parlé de contenance? Tu dois surement avoir raison, mais je vois pas ce quoi tu parles...

    Sinon, mon problème pourrait se résumer ainsi :
    Soit trois classes A B, et C(classe mère). B est une classe extrement voisine de la classe A. Tous les traitements valables pour A sont valables pour B, exepté setImageReferenceIR() qui est diffénte dans B.
    Deux choix s'offrent à nous:
    *Mettre les classes A et B sur le même plan, toutes les deux héritant de C. Ils faudra implémenter toutes les méthodes dans chaqune de ces classes.
    *Faire hériter B de A, et réécrire la méthode setImageReferenceIR() uniquement.


    J'espère avoir été clair ,

  6. #6
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 294
    Billets dans le blog
    2
    Par défaut
    Pourquoi n'avez-vous pas opté pour un design de type "template method" ?

  7. #7
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    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 296
    Par défaut
    Citation Envoyé par poukill
    Tout est pareil, sauf que la classe n'est consituée que d'une seule image infrarouge, alors que B de deux images infrarouges....
    Pour moi, c'est là que tu parles de contenance. Je peux me tromper.
    Je ne vois pas comment un truc qui dérive peut avoir moins que ce dont il dérive. Cela me parait guère substituable, donc sujet à dérivation (publique).

    Si tu ne vois pas ce à quoi je fais allusion, sur object mentor tu as des articles sur le LSP et sur comme quoi les carrés ne sont pas des rectangles.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  8. #8
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Luc Hermitte
    Pour moi, c'est là que tu parles de contenance. Je peux me tromper.
    Je ne vois pas comment un truc qui dérive peut avoir moins que ce dont il dérive. Cela me parait guère substituable, donc sujet à dérivation (publique).

    Si tu ne vois pas ce à quoi je fais allusion, sur object mentor tu as des articles sur le LSP et sur comme quoi les carrés ne sont pas des rectangles.
    Je suis embêté Luc, tu est en train de me montrer que j'ai tort

    Plus sérieusement, B possède deux images infrarouges, alors que A une seule. C'est ce que j'ai dit...
    Maintenant, la réalité est la suivante :
    L'objet A est vu par une caméra infrarouge à deux CCD (2 secteurs de 30°)
    L'objet B est vu par une caméra infrarouge à deux CCD aussi (1 secteur de 30° en haute résolution)
    Donc en fait l'objet B est la moitié de l'objet A (on ne voit qu'un secteur, mais "zoomé" )

    C'est bien un mécanisme d'héritage pour moi à mettre en oeuvre, car B est une partie de A! Juste qu'ici, tout va bien. Le problème c'est que les physiciens font l'analyse d'un seul secteur à la fois : je ne dois prendre en compte dans mes calculs qu'un seul des 2 secteurs pour l'objet A.

    Mis à part cette fonction membre à implémenter différemment, les objets A et B sont les mêmes, une fois que j'ai pris la "moitié de l'objet A".
    Mais B est bien une conséquence de A...

    Ton avis m'intéresse beaucoup Luc,

    Merci à tous pour votre aide !

  9. #9
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par poukill
    Je suis embêté Luc, tu est en train de me montrer que j'ai tort
    Et je crains qu'il n'ait raison.

    C'est bien un mécanisme d'héritage pour moi à mettre en oeuvre, car B est une partie de A!
    Si B est une partie de A, A doit contenir un B, pas B heriter de A.

    Juste qu'ici, tout va bien. Le problème c'est que les physiciens font l'analyse d'un seul secteur à la fois : je ne dois prendre en compte dans mes calculs qu'un seul des 2 secteurs pour l'objet A.
    Introduire une classe secteur?

  10. #10
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Luc Hermitte
    Pour moi, c'est là que tu parles de contenance. Je peux me tromper.
    Je ne vois pas comment un truc qui dérive peut avoir moins que ce dont il dérive. Cela me parait guère substituable, donc sujet à dérivation (publique).
    Hum... Tu as raison Luc.
    L'inverse serait bien entendu beaucoup plus logique...

    Le truc, c'est qu'au début de mon projet, je n'avais que deux classes (Antenne et LPT), toutes les deux dérivant de ma classe mère abstraite.
    Depuis, une nouvelle caméra haute résolution est installé, alors j'ai rajouté cette classe LPT_HR (que j'ai juste appelé HR ) HR = Haute Résolution

    Dans ce cas là, que faut-il faire? Remodifier la conception pour faire hériter LPT de HR? Ma conception était mauvaise, car pas assez "robuste"?
    Ca m'embête d'admettre que ma conception est pourrie, car j'y ai passé du temps, beaucoup de temps...

    Alors, dites moi... Je vous écoute. Je suis prêt à recoder s'il le faut ! ^^


    Merci à vous en tous cas pour votre aide !

  11. #11
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Il n'y a qu'une grande règle à l'héritage: B hérite de A si et seulement si tout objet B EST UN A.

    Donc si HR hérite de LPT, ca veut dire que tout HR est un LPT....

    Pour se ramener au code, imagines le code utilisateur de tes objets... Un bout de code qui prend un LPT en entrée doit toujours fonctionner avec un HR, puisque LPT en hérite ! Donc tout HR est un LPT.

  12. #12
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Ok merci à vous deux...
    J'ai commandé pour l'instant :

    1)Herb Sutter/ Andrei Alexandrescu - Standard de programmation en C++
    2)B. Meyer - Conception et Programmation Orienté Objet
    3)Design Patterns Tête la première

    Ca, c'est fait.
    Citation Envoyé par Luc Hermitte
    1) Herb Sutter/ Andrei Alexandrescu - Standard de programmation en C++
    -> Très bien. Mais il y a peut être d'autres choses à connaitre avant -- genre AC++. Je ne sais pas s'il est immédiatement pertinent.
    Je ne suis pas sûr de comprendre ce que tu veux dire. Quelle choses à connaître avant?
    Le commentaire de bigboomshakala n'en fait pas vraiment mention :http://c.developpez.com/livres/#L2744071447
    Donc si tu pouvais t'expliquer un peu plus, ce serait sympa.

    Merci !

  13. #13
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    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 296
    Par défaut
    Le genre de choses à connaitre avant ?
    Le C++

    Le truc est que je ne sais pas s'il convient à des nouveaux arrivés. Ceci dit, il explique des choses importantes que tu ne trouveras dans aucun cours.
    Donc, je ne sais pas.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  14. #14
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Luc Hermitte
    Le genre de choses à connaitre avant ?
    Le C++
    Le C++ efficace est à mon avis à lire avant.

    Le truc est que je ne sais pas s'il convient à des nouveaux arrivés. Ceci dit, il explique des choses importantes que tu ne trouveras dans aucun cours.
    Donc, je ne sais pas.
    C'est un livre bizarre que je n'ai pas apprécié beaucoup. Le titre est d'une part de nature à induire en erreur, d'autre part, il mélange des conseils de plusieurs natures sans préciser justement la nature, ce qui fait que certaines choses peuvent être aisément mal comprises. Il faudrait que je le reprenne
    pour pouvoir être explicite (mais comme je ne l'ai pas acheté, il faudrait que je m'assure qu'il est toujours au boulot... la dernière fois que je l'ai vu il était sur le bureau d'un collègue qui a changé de site, il n'est pas impossible qu'il l'ai emporté)

  15. #15
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Luc Hermitte
    Le genre de choses à connaitre avant ?
    Le C++
    J'ai déjà quelques bases en C++ quand même

    S'il n'y a que ça, je peux commander aussi le C++ efficace. La dernière version (3ème édition) est en Anglais. Ca ne me pose pas vraiment problème, mais quand y'a pas mal de trucs à défricher, en français c'est bien aussi!

    Quelle version faudrait-il privilégier?

  16. #16
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par poukill
    J'ai déjà quelques bases en C++ quand même

    S'il n'y a que ça, je peux commander aussi le C++ efficace. La dernière version (3ème édition) est en Anglais. Ca ne me pose pas vraiment problème, mais quand y'a pas mal de trucs à défricher, en français c'est bien aussi!

    Quelle version faudrait-il privilégier?
    La dernière. Il a ajouté des choses, mis à jour d'autres et enlevé certaines qui n'avaient plus qu'un intérêt historique.

  17. #17
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Bon, ben j'ai plus qu'à rajouter ce livre à ma prochaine commande...

    Merci Jean-Marc.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appel de fonction virtuelle pure
    Par Darktib dans le forum Langage
    Réponses: 16
    Dernier message: 23/05/2009, 09h35
  2. Réponses: 3
    Dernier message: 09/02/2009, 16h15
  3. Fonction appelant une fonction virtuelle pure
    Par oodini dans le forum C++
    Réponses: 12
    Dernier message: 19/09/2008, 08h24
  4. Réponses: 1
    Dernier message: 25/10/2007, 21h25

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