Questions sur l'héritage (surtout sur le protected et le private)
daviddubois
Messages postés92Date d'inscriptionvendredi 19 mars 2004StatutMembreDernière intervention 6 janvier 2012
-
30 mars 2008 à 19:08
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 2010
-
30 mars 2008 à 20:28
Bonjour tout le monde,
Je viens vous poser des questions à props de l'héritage.
J'ai compris qu'on avait une classe mère (de base) et une classe fille (dérivée).
Si ma classe fille hérite en public de la classe mère, elle aura accès à tout ce qui est en public dans la classe mère.
Par contre, s'est quand j'hérite en protected et en private dans la classe fille que je ne comprends plus.
J'ai fais des tests et j'ai l'impression que l'héritage en protected et en private ne me donne pas le droit d'utiliser les objets de la classe mère, mais alors à quoi ça sert ce protected et ce private ?
Dans mon cours, j'ai trois classes, une hérite en privé de ça classe mère et est aussi la classe mère d'une autre classe qui hérite en publique :
#ifndef CHAINE_H
#define CHAINE_H
class CChaine
{
public:
CChaine(); // Constructeur par défaut
CChaine(const CChaine& Source); // Constructeur par copie
CChaine(const char* UneChaine); // Constructeur spécifique
~CChaine(); // Destructeur
const char* Chaine() const; // Accesseur du texte de la chaîne
bool EstNull() const; // Accesseur de test sur le texte (m_Chaine == NULL) bool EstVide() const; // Accesseur de test sur le texte (m_Chaine NULL) || (m_Chaine "")
void Vider(); // Modificateur permettant de supprimer le texte de la chaîne (on revient à NULL)
bool Chaine(const char* UneChaine); // Modificateur du texte de la chaîne
private:
char* m_Chaine; // Membre contenant l'adresse du tableau de caractères alloué dynamiquement
};
class CChaineComposee : private CChaine
{
public:
CChaineComposee(); // Constructeur par défaut
CChaineComposee(const CChaineComposee& Source); // Constructeur par copie
CChaineComposee(const char* UneChaine, char UnSeparateur); // Constructeur spécifique
~CChaineComposee(); // Destructeur
long NombreChamps() const; // Accesseur du nombre de champs
const char* Champs(long Indice) const; // Accesseur d'un champ
bool Definir(const char* UneChaine, char UnSeparateur); // Modificateur permettant de modifier la chaîne et de générer le tableau des champs
private:
bool Decomposer(char UnSeparateur); // Modificateur permettant de modifier la chaîne et de générer le tableau des champs
private:
long m_NbrChamps;
char** m_Champs;
};
class CChargeurFichierTexte : public CChaineComposee
{
public:
CChargeurFichierTexte();
~CChargeurFichierTexte();
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 30 mars 2008 à 20:01
Tu peux faire de l'héritage sans avoir à utiliser les attributs définis dans la classe mère : dans ce cas la classe fille ne fait que surcharger les méthodes de la classe mère (on peut voir ca comme l'implémentation d'une interface en Java).
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 30 mars 2008 à 20:28
Tu peux te rendre sur cette page qui explique les différents héritages.
Tableau 8-1. Droits d'accès sur les membres hérités
<col title= \"C1\" width=\"1*\" /><col title=\"C2\" width=\"1*\" /><col title=\"C3\" width=\"1*\" /><col title=\"C4\" width=\"1*\" /><col title=\"C5\" width=\"1*\" />----
|mot clé utilisé pour l'héritage |----
Accès aux données |<var class ="LITERAL">public</var> |<var class= "LITERAL">protected</var> | <var class="LITERAL">private</var> |----
mot clé utilisé, <var class ="LITERAL">public</var>, <var class="LITERAL">public</var>, <var class="LITERAL">protected</var>, <var class="LITERAL">private</var>, ----
pour les champs, <var class="LITERAL">protected</var>, <var class="LITERAL">protected</var>, <var class="LITERAL">protected</var>, <var class="LITERAL">private</var>, ----
et les méthodes, <var class="LITERAL">private</var>, <var class="LITERAL">interdit</var>, <var class="LITERAL">interdit</var>, <var class="LITERAL">interdit</var>
Pour résumer :
-Tu ne peux jamais utiliser les choses privées
-En héritage public, les protections ne changent pas
-En héritage protected, les membres publics deviennent protected
-En héritage private, les champs protected et public deviennent private
_____________________________________
Un éditeur de ressources gratuit pour Windows