Heritage

redha_0172 Messages postés 2 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 17 décembre 2006 - 16 déc. 2006 à 15:29
redha_0172 Messages postés 2 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 17 décembre 2006 - 17 déc. 2006 à 00:27
salut tout le monde,

voici mon problème:
j'ai les classes suivantes: 
Personne
{
.....
virtuel void afficher();
}

Salarie : public Personne
{
.........................
   void afficher();
........................
}

Directeur : public Salarie
{
.........................
 void afficher();
}

avec l'outils de dev KDEV:
il n'y a pas de problème si j'elimine Directeur.
avec Directeur, le compilateur genere une erreur sur le vtab (tout va bien si le mis afficher en commentaire), portant je l'ai declaré virtuel dans Personne.
merci de me repondre.
cordialement.

4 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
16 déc. 2006 à 15:48
Salarie : public Personne
{
.........................
   void afficher();
........................
}

Par défaut, afficher() est ici private.
Ton héritage est public, donc pas d'accès.
(à moins que tu n'ai pas tout mis dans l'exemple) 
de plus je pense qu'il faut remettre virtual ici.
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
16 déc. 2006 à 16:02
0u plus simplement, dérives Directeur de Personne et pas de Salarie.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
16 déc. 2006 à 16:14
Le mot-clé virtual irait sans doute mieux que virtuel
Il faut répéter virtual dans Salarie::afficher aussi

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
redha_0172 Messages postés 2 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 17 décembre 2006
17 déc. 2006 à 00:27
salut,
la declaration de la méthode afficher() est public aussi virtual.
j'ai trouvé une solution, mais un peu compliquer;
j'ai ajouté la methode dans la classe Personne la declaration suivante:
virtual Personne* clone() const=0;
ensuite dans les autres:
Salarie:
 Salarie* clone() const { return new Salarie()};
Directeur:
  Directeur* clone() const { return new Directeur()};
Commercial:
Commercial* clone() const { return new Commercial()};
de cette façon tout va bien.
cordialement.
0
Rejoignez-nous