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 :

héritage et méthode abstraite


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 98
    Points : 48
    Points
    48
    Par défaut héritage et méthode abstraite
    Ai-je le droit de faire ça? (changer le 'Image2D' par 'Image' dans la définition de la méthode)

    Image2D.hh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class Image2D {
       public:
          virtual Image2D* noirEtBlanc(std::string) = 0;
    };
    Image.hh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class Image : public Image2D, public Matrice<Pixel> {
       public:
          Image* noirEtBlanc(std::string);
    };

  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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Seulement si ton compilo supporte les retours covariants (Visual C++ 2005 le fait -- aucune idée pour les autres).

  3. #3
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    je crois que g++ aussi
    Hiko-seijuro

    n'cha - hoyoyo gang

    espace perso : http://hiko-seijuro.developpez.com
    dernier tuto : Introduction à l'éditeur de texte Emacs sous linux
    consulter les faqs : http://www.developpez.com/faq
    PAS DE QUESTIONS TECHNIQUES PAR MP OU MAIL

  4. #4
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 98
    Points : 48
    Points
    48
    Par défaut
    J'ai utilisé l'exemple de la fac et mon compilateur supporte les retour covariants.
    le message "Derived::Test" s'affiche.
    merci.

  5. #5
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 98
    Points : 48
    Points
    48
    Par défaut
    une autre question: ça marche pareil quand on redefinit les operateurs?

    Image2D.hh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class Image2D {
       public:
          virtual Image2D* operator*(Image2D&) = 0;
    };
    Image.hh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class Image : public Image2D, public Matrice<Pixel> {
       public:
          Image* operator*(Image&);
    };

  6. #6
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Points : 284
    Points
    284
    Par défaut
    Citation Envoyé par Laurent Gomila
    Seulement si ton compilo supporte les retours covariants (Visual C++ 2005 le fait -- aucune idée pour les autres).
    Ce n'est pas vraiment du retour covariant puisque c'est le type de l'objet auquel on applique la méthode "noirEtBlanc(...)" qui va décider de la fonction utilisée.

  7. #7
    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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Citation Envoyé par Ulmo
    Ce n'est pas vraiment du retour covariant puisque c'est le type de l'objet auquel on applique la méthode "noirEtBlanc(...)" qui va décider de la fonction utilisée.
    Et alors ce serait quoi un retour covariant pour toi, si ce n'est pas de pouvoir substituer le type de retour d'une fonction virtuelle par un type dérivé ?

  8. #8
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Points : 284
    Points
    284
    Par défaut
    Je pensais à une surcharge sur le type de retour.
    J'aurais été surpris que le retour covariant ne soit pas possible. Je ne vois pas ce que cela pose comme problème, alors que je comprend bien celui posé par la surcharge sur le type de retour.

  9. #9
    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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    C'est pas moi qui l'ait inventé, si tu prenais la peine de regarder n'importe quel cours ou FAQ en ligne tu verrais que c'est bien ça la définition du retour covariant.

  10. #10
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Points : 284
    Points
    284
    Par défaut
    Je le crois volontiers, mais comme je ne connaissais pas le terme, j'ai essayé de deviner ce qu'il désignait. Avec un ton assuré. Et je me suis planté

  11. #11
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 98
    Points : 48
    Points
    48
    Par défaut
    une autre question: ça marche pareil quand on redefinit les operateurs?

    Image2D.hh
    Code :

    class Image2D { public: virtual Image2D* operator*(Image2D&) = 0; };


    Image.hh
    Code :

    class Image : public Image2D, public Matrice<Pixel> { public: Image* operator*(Image&); };




    Apparemment, ça ne fonctionne pas pareil, mais pourquoi? Y a t-il une façon de faire des operateur abstrait?

  12. #12
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par troussepoil
    Apparemment, ça ne fonctionne pas pareil, mais pourquoi? Y a t-il une façon de faire des operateur abstrait?
    Il n'y a pas de covariance sur les parametres. D'ailleurs pour ne pas casser le systeme des types, il faudrait de la contra-variances (et encore, uniquement sur les parametres const).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  13. #13
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Les retours covariants sont dans la norme et sont supportés par la plupart des compilateurs.
    Il ne fonctionnent pas avec auto_ptr par contre.
    Boost ftw

  14. #14
    Membre averti
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Points : 307
    Points
    307
    Par défaut
    Citation Envoyé par loufoque
    Les retours covariants sont dans la norme et sont supportés par la plupart des compilateurs.
    Il ne fonctionnent pas avec auto_ptr par contre.
    J'ai cru voir que ça fonctionnait sous VC2005.

    [edit] en fait, je crois maintenant qu'il accepte n'importe quoi...
    mais plante à l'exécution.

    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
     
     
    #include <iostream>
    #include <memory>
    using namespace std;
     
    struct A { virtual void print(){ cout << "A" << endl;}};
    struct B : A { virtual void print(){ cout << "B" << endl;}};
    struct C : A { virtual void print(){ cout << "C" << endl;}};
     
    struct FA { auto_ptr<A> f(){ return auto_ptr<A>(new A); } };
    struct FB { auto_ptr<B> f(){ return auto_ptr<B>(new B); } };
     
    int main()
    {
      FB fb;
      fb.f()->print();
     
      auto_ptr<A> a = auto_ptr<B>( new A );
      a->print();
     
      auto_ptr<A> b = auto_ptr<B>( new B );
      b->print();
     
      auto_ptr<A> c = auto_ptr<B>( new C );
      c->print();
    }

Discussions similaires

  1. Réponses: 8
    Dernier message: 27/01/2014, 10h36
  2. Méthode abstraite (virtuelle) et héritage
    Par wattman dans le forum Windev Mobile
    Réponses: 0
    Dernier message: 31/03/2009, 15h31
  3. Les méthodes abstraites et les interfaces
    Par ETI-trian dans le forum Langage
    Réponses: 3
    Dernier message: 17/01/2006, 12h14
  4. Réponses: 8
    Dernier message: 04/06/2004, 09h13
  5. [Héritage] Redéfinition méthode
    Par petit-ourson dans le forum Langage
    Réponses: 9
    Dernier message: 06/05/2004, 16h06

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