Heritage en c++ : pb de private
Fermé
pom
-
25 juin 2004 à 16:40
Behall Messages postés 1 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 8 août 2008 - 8 août 2008 à 16:19
Behall Messages postés 1 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 8 août 2008 - 8 août 2008 à 16:19
4 réponses
j'ai trouvé, j'ai transformé mon constructeur par défaut de Mamifere par
Mamifere():Animal(0,0,race1),patte(0) {cout<<"\nAppel du constructeur par defaut de Mamifere\n";}
pom
Mamifere():Animal(0,0,race1),patte(0) {cout<<"\nAppel du constructeur par defaut de Mamifere\n";}
pom
Utilisateur anonyme
25 juin 2004 à 16:46
25 juin 2004 à 16:46
un attribut private ne peut etre utilise que par la classe a laquelle il appartient donc pour acceder au element private
il faut declare une fonction public generalement appelle getAttribut qui retourne l'attribut private en gros tu dois faire
Race getRace()
{return(this.race);
}
ces methodes son appelees des accesseurs
voila
il faut declare une fonction public generalement appelle getAttribut qui retourne l'attribut private en gros tu dois faire
Race getRace()
{return(this.race);
}
ces methodes son appelees des accesseurs
voila
Canard007
Messages postés
5929
Date d'inscription
mercredi 26 mai 2004
Statut
Contributeur
Dernière intervention
18 septembre 2009
215
25 juin 2004 à 16:50
25 juin 2004 à 16:50
les classes filles ne peuvent pas modifier les attributs des classes parents declaré en private ???
Utilisateur anonyme
25 juin 2004 à 16:51
25 juin 2004 à 16:51
en fait non les classes heritieres peuvent acceder au protected seulement
(je travaille sur des souvenirs la c'est a verifier :) )
pour modifier un attribut privée on utilise une fonction publique
setAttribut(new_val)
{ this.attribut=new_val;
}
(je travaille sur des souvenirs la c'est a verifier :) )
pour modifier un attribut privée on utilise une fonction publique
setAttribut(new_val)
{ this.attribut=new_val;
}
Merci NoSFe, effectivement les classes heritières ne peuvent accéder qu'au protected.
Mais j'aimerais que ma classe dérivée Mamifère accède au private de Animal (je voudrais afficher la race de mon Animal)
J'ai fait Animal::get_race(return race;}
mais cout<<mamifere.get_race(); ne marche pas (j'ai créé mamifere comme un Mamifere)
pom
Mais j'aimerais que ma classe dérivée Mamifère accède au private de Animal (je voudrais afficher la race de mon Animal)
J'ai fait Animal::get_race(return race;}
mais cout<<mamifere.get_race(); ne marche pas (j'ai créé mamifere comme un Mamifere)
pom
tafiscobar
Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
177
>
pom
25 juin 2004 à 17:06
25 juin 2004 à 17:06
et get_race, il est public ou pas?? s'il n'est pas public, tu ne peux y accéder depuis l'extérieur. S'il est protected, seules les classes filles y accédent et private, personne, c'est le secret de la classe.
tafiscobar "lou waye def bopame"
la nullite n'existe pas, l'ignorance oui, ah je suppose!!!
tafiscobar "lou waye def bopame"
la nullite n'existe pas, l'ignorance oui, ah je suppose!!!
bonjour tafiscobar, bonjour NoSFe.
Merci encore pour votre aide.
J'ai trouvé une solution en mixant vos deux propositions.
Tafiscobar, ma fonction get_race() est publique. NoSFe, c'est
Race Animal::getRace()
{ return (this->race);
}
et non this.race. Mais de toute manière return race; fonctionne aussi.
Par contre quand je fais
friend std::ostream & operator<<(std::ostream & os, const Mamifere & mam) {os<<"\nage = "<<mam.age<<" poids = "<<mam.poids<<" race = "<<mam.get_race()<<" patte = "<<mam.patte<<endl; return os;}
j'obtiens :
error: passing `const Mamifere' as `this' argument of `Race Animal::get_race()' discards qualifiers
en revanche, que je supprime le const de const Mamifere & mam
ca marche super bien.
Savez-vous pourquoi ?
merci encore
pomme
Merci encore pour votre aide.
J'ai trouvé une solution en mixant vos deux propositions.
Tafiscobar, ma fonction get_race() est publique. NoSFe, c'est
Race Animal::getRace()
{ return (this->race);
}
et non this.race. Mais de toute manière return race; fonctionne aussi.
Par contre quand je fais
friend std::ostream & operator<<(std::ostream & os, const Mamifere & mam) {os<<"\nage = "<<mam.age<<" poids = "<<mam.poids<<" race = "<<mam.get_race()<<" patte = "<<mam.patte<<endl; return os;}
j'obtiens :
error: passing `const Mamifere' as `this' argument of `Race Animal::get_race()' discards qualifiers
en revanche, que je supprime le const de const Mamifere & mam
ca marche super bien.
Savez-vous pourquoi ?
merci encore
pomme
Behall
Messages postés
1
Date d'inscription
vendredi 8 août 2008
Statut
Membre
Dernière intervention
8 août 2008
>
pom
8 août 2008 à 16:19
8 août 2008 à 16:19
houla la question date un peu ... En fait les méthodes qui ne sont pas déclarées const comme ceci
Race Animal::get_race() const
{ .. }
ne peuvent pas être appelées sur une instance const (même un mammifère) comme dans ton exemple.
A priori une méthode qui n'e'st pas signalée const est considérée comme modifiant potentiellement son objet et l'appeler sur un objet ou une référence (ou un pointeur sur) const est interdit.
Race Animal::get_race() const
{ .. }
ne peuvent pas être appelées sur une instance const (même un mammifère) comme dans ton exemple.
A priori une méthode qui n'e'st pas signalée const est considérée comme modifiant potentiellement son objet et l'appeler sur un objet ou une référence (ou un pointeur sur) const est interdit.