Partage
  • Partager sur Facebook
  • Partager sur Twitter

heritage et operateurs

Anonyme
    5 novembre 2018 à 15:44:21

    comment je peux utiliser les operateurs de classe  mere dans la classe fille sans faire l'appel de la   methode operator  une autre fois dans la classe fille par exemple dans mon code je veux faire   if this->personne==E.personne sans faire this->personne::operator==(E) == true comment  je peux le faire ? 

    pourquoi je ne peux pas expoilter les opérateurs de la classe mere dans la clase fille  meme si ils sont heriter 

    NB: j'ai deja essaye if this->personne==E.personne mais ca ne marche pas 

    ma classe personne:

    class personne

    {

    protected:

    string nom, prenom;

    Date d;

    public:

    personne();

    personne(string , string , int , int , int );

    personne(string, string, Date);

    personne( const personne &);

    void afficher();

    Date getD();

    string getNom();

    string  getPrenom();

    void getD(Date );

    void getNom(const string  &);

    void getPrenom(const string &);

    //int AgeDePersonne(personne A);

    personne &   operator=( const personne &);

    bool operator==( personne );

    bool operator!=(personne );

    bool operator>(personne );

    bool operator<(personne ); 

    };

    ma classe Etudiant.h

    class Etudiant :public personne

    {

    private:

    int niveau;

    string filiere;

    public:

    Etudiant();

    Etudiant(string,string, Date, int, string);

    Etudiant(personne, int, string);

    Etudiant(const Etudiant &);

    void afficher();

    bool operator==( Etudiant );

    };

    Etudiant.cpp

    Etudiant::Etudiant  ():personne(), niveau(3), filiere  ( "génie info")

    }

    Etudiant::Etudiant (string  nm, string pr, Date x, int a ,string fl ):personne(nm,pr,x),niveau(a),filiere(fl)

    {

    }

    Etudiant::Etudiant(personne A, int B, string C):personne(A),niveau(B),filiere(C)

    {

    }

    Etudiant::Etudiant(const  Etudiant &E):personne(E), niveau(E.niveau), filiere(E.filiere)

    {

    }

    void Etudiant ::afficher()

    {

    this->personne::afficher();

    cout << "la filiere est" << filiere << endl;

    cout<< "le niveau est :" << niveau << endl;

    }

    bool  Etudiant ::operator==(Etudiant E)

    {

    if (  niveau== E.niveau  && E.filiere==filiere  && this->personne::operator==(E) == true)

    {

    return true;

    }

    return false;

    }

    • Partager sur Facebook
    • Partager sur Twitter
      5 novembre 2018 à 15:47:46

      Lu'!

      Si tu galères avec ça, c'est pour une raison simple : c'est complètement incompatible avec la notion d'héritage. Les opérateurs sont prévus pour bosser avec des types à sémantique de valeur. Ici, tes personnes et tes étudiants ont une sémantique d'entité. L'égalité n'a plus de sens en présence d'entités, et encore moins quand on commence à ajouter de l'héritage dans l'histoire.

      • Partager sur Facebook
      • Partager sur Twitter

      Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

        5 novembre 2018 à 15:57:17

        Chaimaeaz123 a écrit:

        sans faire this->personne::operator==(E) == true comment  je peux le faire ? 

        `this->` et le `== true` sont superflues mais sinon c'est la bonne façon d'appeler explicitement une méthode parent. Autrement tu peux faire des cast x)

        Mais je rejoins Ksass, l'égalité n'a aucun sens dans la sémantique d'entité, tu es confronté à un problème de conception

        PS : Mets ton code dans les balises avec le bouton </>, là c'est illisible

        -
        Edité par romantik 5 novembre 2018 à 16:00:31

        • Partager sur Facebook
        • Partager sur Twitter
        Dream on, Dream on, Dream until your dream comes true
          5 novembre 2018 à 16:39:38

          Bonjour,

          Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
          Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

          Pour plus d'informations, nous vous invitons à lire les règles générales du forum

          Merci d'utiliser la mise en forme de code Image

          Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Image de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: cpp;">Votre code ici</pre>.

          Manque de Politesse

          Votre message ne comporte pas ou peu de formules de politesse (« Bonjour », « Merci », « Au revoir », etc.). Les règles du site exigent que chaque nouveau message comporte un minimum de politesse. Après tout, les gens qui répondent le font gratuitement, sur leur temps libre. Ils méritent bien un minimum de considération, n'est-ce pas ?

          • Partager sur Facebook
          • Partager sur Twitter

          heritage et operateurs

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown