La différence entre l'héritage public C ++, l'héritage protégé et l'héritage privé

1. Héritage public - public

Lors de l'héritage public, les attributs d'accès aux membres publics et protégés de la classe de base restent inchangés. Les nouveaux membres de la classe dérivée peuvent accéder aux membres publics et protégés de la classe de base, mais ne peuvent pas accéder aux membres privés de la classe de base . Les objets d'une classe dérivée peuvent uniquement accéder aux membres publics de la classe dérivée (y compris les membres publics hérités), mais ne peuvent pas accéder aux membres protégés et privés.

#include <iostream>
using namespace std;

class Base         
{
public: 
    Base(int nId) {mId = nId;}
    int GetId() {mId++;cout<< mId<<endl;return mId;}
protected:
    int GetNum() {cout<< 0 <<endl;return 0;}
private: 
    int mId; 
};

class Child : public Base
{
public:
    Child() : Base(7) {;}
    int GetCId() {
   
   return GetId();}    //新增成员可以访问公有成员
    int GetCNum() {
   
   return GetNum();}  //新增成员可以访问保护成员
                                      //无法访问基类的私有成员
protected:
    int y;
private:
    int x;
};

int main() 
{ 
    Child child;
    child.GetId();        //派生类的对象可以访问派生类继承下来的公有成员
    //child.GetNum();     //无法访问继承下来的保护成员GetNum()
    child.GetCId();   
    child.GetCNum();      //派生类对象可以访问派生类的公有成员
    //child.x;
    //child.y;            //无法访问派生类的保护成员y和私有成员x
    return 0;
}

2. Héritage protégé protégé

Dans l'héritage protégé, les membres publics et les membres protégés de la classe de base deviennent des membres protégés après avoir été hérités par la classe dérivée. Les nouveaux membres de la classe dérivée peuvent accéder aux membres publics et protégés de la classe de base, mais ne peuvent pas accéder aux membres privés de la classe de base. Les objets de la classe dérivée ne peuvent pas accéder aux membres publics de la classe dérivée héritée de la classe de base, aux membres protégés et aux membres privés.

class Child : protected Base
{
public:
    Child() : Base(7) {;}
    int GetCId() {
   
   return GetId();}   //可以访问基类的公有成员和保护成员
    int GetCNum() {
   
   return GetNum();}
protected:
    int y;
private:
    int x;
};

int main() 
{ 
    Child child;
    //child.GetId();//派生类对象访问不了继承的公有成员,因为此时保护继承时GetId()已经为          protected类型
    //child.GetNum(); //这个也访问不了
    child.GetCId();
    child.GetCNum();
    return 0;
}

3. Héritage privé - privé

Dans l'héritage privé, les membres publics et les membres protégés de la classe de base deviennent des membres privés après avoir été hérités par la classe dérivée. Les nouveaux membres de la classe dérivée peuvent accéder aux membres publics et protégés de la classe de base, mais ne peuvent pas accéder aux membres privés de la classe de base. Les objets de la classe dérivée ne peuvent pas accéder aux membres publics de la classe dérivée héritée de la classe de base, aux membres protégés et aux membres privés.

class Child : private Base
{
public:
    Child() : Base(7) {;}
    int GetCId() {
   
   return GetId();}   //可以访问基类的公有成员和保护成员
    int GetCNum() {
   
   return GetNum();}
protected:
    int y;
private:
    int x;
};

int main() 
{ 
    Child child;
    //child.GetId();//派生类对象访问不了继承的公有成员,因为此时私有继承时GetId()已经为          private类型
    //child.GetNum(); //派生类对象访问不了继承的保护成员,而且此时私有继承时GetNum()已经为          private类型
    child.GetCId();
    child.GetCNum();
    return 0;
}

4. Résumé

Quelle que soit la méthode d'héritage, les nouveaux membres de la classe dérivée peuvent accéder aux membres publics et protégés de la classe de base, mais ne peuvent pas accéder aux membres privés. Le mode d'héritage affecte les propriétés d'accès des membres hérités de la classe dérivée, et l'utilisation d'amis (ami) peut accéder aux membres protégés et aux membres privés.
Autorisations d'accès pour les objets dérivés
Écrivez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/sxtdzj/article/details/81906504
conseillé
Classement