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 :

[debutant] probleme avec methode virtuelle pure


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 271
    Par défaut [debutant] probleme avec methode virtuelle pure
    Bon nouveau probleme , j ai un personnes .cc qui ressemble a ca :
    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
     
    class personne { 
        private: 
            string nom ; 
            string prenom ;
            string etablissement ; 
        public:
            personne () : nom(""), prenom(""), etablissement("UTBM"){};
            personne (string nvnom, string nvprenom="", string nvetablis="UTBM") :
                  nom(nvnom), prenom(nvprenom), etablissement(nvetablis){};
            virtual ~personne(){};
     
            virtual string get_nom() const;
            virtual string get_prenom() const;
            virtual string get_etablis() const;
            virtual string get_qualite() = 0;
     
            virtual personne& change_nom(string nvnom);
            virtual personne& change_prenom(string nvprenom);
            virtual personne& change_etablis(string nvetablis);
     
            virtual void affiche() const;
     
    }; 
     
    class etudiant : public personne { 
        private : 
            // donnees specifiques a etudiant 
            string branche; 
            string filiere; 
            int emploitemps;
     
        public : 
     
            etudiant() : branche(""),filiere(""),emploitemps(0){};
            etudiant(string nvnom, string nvprenom,string nvbranche="", string nvfiliere = "",                  int nvemploitemps = 0) : personne(nvnom, nvprenom),                  branche(nvbranche),filiere(nvfiliere),emploitemps(nvemploitemps){};
            ~etudiant(){};
     
            string get_branche() const;
            string get_filiere() const;
            int get_emploitemps() const;
     
            etudiant& change_branche ( string nvbranche);
            etudiant& change_filiere ( string nvfiliere);
            etudiant& change_emploitemps(int nvemploitemps);
            void affiche() const;
     
    };
    Mais au moment de la compilation , le compilo me dit qu il ne peut pas alouer un objet abstrait de type etudaint parce que cette fonction est pure ds la classe etudiant : personne :: get_qualite .

    J ai pourtt redefini cette fonction ds etudiant comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string etudiant :: get_qualite(){
    return filiere ; }
    Alors comprends pas ,encore ....

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    la méthode surcharger doit apparaître dans la signature de ta classe etudiant, il faudrait que ton code ressemble à ceci :
    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
    class personne { 
        private: 
            string nom ; 
            string prenom ;
            string etablissement ; 
        public:
            personne () : nom(""), prenom(""), etablissement("UTBM"){};
            personne (string nvnom, string nvprenom="", string nvetablis="UTBM") :
                  nom(nvnom), prenom(nvprenom), etablissement(nvetablis){};
            virtual ~personne(){};
    
            virtual string get_nom() const;
            virtual string get_prenom() const;
            virtual string get_etablis() const;
            virtual string get_qualite() = 0;
    
            virtual personne& change_nom(string nvnom);
            virtual personne& change_prenom(string nvprenom);
            virtual personne& change_etablis(string nvetablis);
             
            virtual void affiche() const;
             
    }; 
      
    class etudiant : public personne { 
        private : 
            // donnees specifiques a etudiant 
            string branche; 
            string filiere; 
            int emploitemps;
     
        public : 
                 
            etudiant() : branche(""),filiere(""),emploitemps(0){};
            etudiant(string nvnom, string nvprenom,string nvbranche="", string nvfiliere = "",                  int nvemploitemps = 0) : personne(nvnom, nvprenom),                  branche(nvbranche),filiere(nvfiliere),emploitemps(nvemploitemps){};
            ~etudiant(){};
    
            string get_branche() const;
            string get_filiere() const;
            string get_qualite();
            int get_emploitemps() const;
    
            etudiant& change_branche ( string nvbranche);
            etudiant& change_filiere ( string nvfiliere);
            etudiant& change_emploitemps(int nvemploitemps);
            void affiche() const;
             
    };
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 271
    Par défaut
    oui j l avais fait , j ai poste le mauvais code ... mais ca ne marche pas

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Et le code vrai code qui ne marche pas ?

  5. #5
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    peux-tu poster un code "minimal" qui permette de reproduire le problème ?

  6. #6
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    J'ai réécrit le code et ça fonctionne, je ne sais pas si c'est ce que tu attends exactement mais bon (la présentation diffère très légèrement, désolé, j'ai appris comme ça ^^)...

    class Personne
    {
    public:
    Personne (string vNom = "", string vPrenom = "", string vEtablissement = "UTBM") :
    nom (vNom), prenom (vPrenom), etablissement (vEtablissement) {};
    ~Personne () {};

    virtual string get_nom () const {return nom;}
    virtual string get_prenom () const {return prenom;}
    virtual string get_etablis () const {return etablissement;}
    virtual string get_qualite () = 0;

    virtual void change_nom (string vNom) {nom = vNom;}
    virtual void change_prenom (string vPrenom) {prenom = vPrenom;}
    virtual void change_etablis (string vEtabli) {etablissement = vEtabli;}

    private:
    string nom;
    string prenom;
    string etablissement;
    };

    class Etudiant : public Personne
    {
    public:
    Etudiant (string vNom = "", string vPrenom = "", string vBranche = "", string vFiliere = "") :
    Personne (vNom, vPrenom), branche (vBranche), filiere (vFiliere), emploiTemps (0) {};
    ~Etudiant () {};

    virtual string get_branche () const {return branche;}
    virtual string get_filiere () const {return filiere;}
    virtual string get_qualite () {};
    virtual int get_emploiTemps () const {return emploiTemps;}

    virtual void change_branche (string vBranche) {branche = vBranche;}
    virtual void change_filiere (string vFiliere) {filiere = vFiliere;}
    virtual void change_emploiTemps (int vEmploi) {emploiTemps = vEmploi;}

    void afficher () const {};

    private:
    string branche;
    string filiere;
    int emploiTemps;
    };
    EDIT : avec ton code ça marche aussi, j'ai juste rajouter des {} sur les fonctions qui n'en avait pas, comme ça elles sont définies...

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Lorsqu'une fonction est virtuelle, elle doit obligatoirement être définie dans le code, même si elle ne sera pas appelée, contrairement aux autres fonctions non virtuelles.
    De même, il est important de renvoyer toujours le bon type, par exemple ta fonction get_qualite ne retourne pas un string pour un etudiant, tu as droit à un warning pour ça, et les warnings, c'est toujours à supprimer

Discussions similaires

  1. Réponses: 19
    Dernier message: 10/02/2005, 22h43
  2. [debutant]probleme avec wxwidgets
    Par iwky dans le forum wxWidgets
    Réponses: 11
    Dernier message: 23/01/2005, 20h23
  3. [DEBUTANT] Probleme avec glortho
    Par barthelv dans le forum OpenGL
    Réponses: 12
    Dernier message: 23/11/2004, 14h21
  4. [DEBUTANT] probleme avec split ?
    Par matN59 dans le forum ASP
    Réponses: 6
    Dernier message: 23/10/2004, 15h47
  5. Réponses: 2
    Dernier message: 31/08/2004, 11h45

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