2008-10-27 2 views
3

Lorsque vous avez une classe dérivée, est-il un moyen plus simple de se référer à une variable d'une méthode autre que:Existe-t-il un moyen facile d'utiliser les variables d'une classe de base?

BaseClass::variable 

EDIT
Comme il se trouve, j'ai trouvé une page qui explique cette question utiliser les fonctions à la place: Template-Derived-Classes Errors. Apparemment, cela fait une différence lors de l'utilisation des classes de modèles.

+0

pourrait vous rendre votre question plus précise, de sorte que vous illustrez le fait qu'il se rapporte à le modèle des classes dérivées? Merci. –

Répondre

10

Si la variable membre de la classe de base est protégée ou publique, vous pouvez simplement vous y référer par son nom dans n'importe quelle fonction membre de la classe dérivée. S'il est privé à la classe de base, le compilateur ne laissera pas la classe dérivée y accéder. Exemple:


class Base 
{ 
protected: 
    int a; 

private: 
    int b; 
}; 

class Derived : public Base 
{ 
    void foo() 
    { 
    a = 5; // works 
    b = 10; // error! 
    } 
}; 

Il y a aussi quelque chose à dire pour garder toutes les variables membres privés et en fournissant des accesseurs au besoin.

Aussi, méfiez-vous des membres de données "se cacher":


class Base 
{ 
public: 
    int a; 
}; 

class Derived : public Base 
{ 
public: 
    int a; 
}; 

Cela va créer deux variables nommées a: un dans Base, un dans Derived, et cela conduira probablement à la confusion et des bugs.

+0

Juste pour clarifier, accéder à un membre privé d'une classe de base résultera en une erreur de compilateur. Le compilateur ne l'ignorera pas et cherchera une autre correspondance. – KeithB

Questions connexes