2011-06-18 4 views
0

Possible en double:
Private/protected inheritanceC++ - defenition - héritage privé

Pouvez-vous me donner l'exemple pour l'héritage privé dans C++? Comme je l'ai compris, dans ce type d'héritage, le public et les caractéristiques protégées du parent ne filtrent pas l'enfant, et seules les entités publiques de l'enfant sont visibles.

Répondre

2

héritage privé:
Tous Public membres de la classe de base deviennent Private membres de la classe dérivée &
Tous Protected membres de la classe de base deviennent Private membres de la classe dérivée.

Un code Exemple:

Class Base 
{ 
    public: 
     int a; 
    protected: 
     int b; 
    private: 
     int c; 
}; 

class Derived:private Base //Not mentioning private is OK because for classes it defaults to private 
{ 
    void doSomething() 
    { 
     a = 10; //Allowed 
     b = 20; //Allowed 
     c = 30; //Not Allowed, Compiler Error 
    } 
}; 

class Derived2:public Derived 
{ 
    void doSomethingMore() 
    { 
     a = 10; //Not Allowed, Compiler Error, a is private member of Derived now 
     b = 20; //Not Allowed, Compiler Error, b is private member of Derived now 
     c = 30; //Not Allowed, Compiler Error 
    } 
}; 

int main() 
{ 
    Derived obj; 
    obj.a = 10; //Not Allowed, Compiler Error 
    obj.b = 20; //Not Allowed, Compiler Error 
    obj.c = 30; //Not Allowed, Compiler Error 

} 

Si vous êtes enclin à savoir sur l'héritage & spécificateurs d'accès, vous pouvez consulter plus à this réponse que je posté tout à fait il y a quelque temps.

0

L'héritage privé est habituellement utilisé comme une forme de composition. Ce n'est pas très différent d'avoir une variable membre du type hérité.

Cela signifie « mis en œuvre en termes de ... »

Dans certains cas rares de pointe, il peut être plus efficace que d'avoir une variable membre.

L'utilisation la plus courante de l'héritage privé que je connaisse est boost::noncopyable