C++私有、保护、公有继承

来源为此处:https://www.cnblogs.com/qlwy/archive/2011/08/25/2153584.html ,在此基础上增加了函数,各种情况调用,看代码自己理解吧。。


#include
using namespace std;

class A       //父类
{
private:
    int privatedateA;
    void print_pri() { cout << "pri" << endl; }
protected:
    int protecteddateA;
    void print_pro() { cout << "pro" << endl; }
public:
    int publicdateA;
    void print_pub() { cout << "pub" << endl; }
};
//////////////////////////////////////////////////////////////////////////
class B :public A
{
public:
    void funct()
    {
        int b;
        //b = privatedateA;   //error:基类中私有成员在派生类中是不可见的
        b = protecteddateA; //ok:基类的保护成员在派生类中为保护成员
        b = publicdateA;    //ok:基类的公共成员在派生类中为公共成员
        //print_pri();      // error:基类私有成员函数在派生类中是不可见的
        print_pro();
        print_pub();
    }
};
//////////////////////////////////////////////////////////////////////////
class C :private A  //基类A的派生类C(私有继承)
{
public:
    void funct()
    {
        int c;
        //c = privatedateA;    //error:基类中私有成员在派生类中是不可见的
        c = protecteddateA;  //ok:基类的保护成员在派生类中为私有成员
        c = publicdateA;     //ok:基类的公共成员在派生类中为私有成员
        //print_pri();         //ok:基类的保护成员函数在派生类中为私有成员函数
        print_pro();
        print_pub();
    }
};
//////////////////////////////////////////////////////////////////////////
class D :protected A   //基类A的派生类D(保护继承)
{
public:
    void funct()
    {
        int d;
        //d = privatedateA;   //error:基类中私有成员在派生类中是不可见的
        d = protecteddateA; //ok:基类的保护成员在派生类中为保护成员
        d = publicdateA;    //ok:基类的公共成员在派生类中为保护成员
        //print_pri();        
        print_pro();
        print_pub();        //ok:基类的公共成员函数在派生类中为保护成员函数
    }
};
//////////////////////////////////////////////////////////////////////////
int main()
{
    int a;

    B objB;
    //a = objB.privatedateA;   //error:基类中私有成员在派生类中是不可见的,对对象不可见
    //a = objB.protecteddateA; //error:基类的保护成员在派生类中为保护成员,对对象不可见
    objB.publicdateA = 3;
    a = objB.publicdateA;    //ok:基类的公共成员在派生类中为公共成员,对对象可见.
    //objB.print_pri();
    //objB.print_pro();
    objB.print_pub();

    C objC;
    //a = objC.privatedateA;   //error:基类中私有成员在派生类中是不可见的,对对象不可见
    //a = objC.protecteddateA; //error:基类的保护成员在派生类中为私有成员,对对象不可见
    //a = objC.publicdateA;    //error:基类的公共成员在派生类中为私有成员,对对象不可见
    //objC.print_pri();
    //objC.print_pro();
    //objC.print_pub();

    D objD;
    //a = objD.privatedateA;   //error:基类中私有成员在派生类中是不可见的,对对象不可见
    //a = objD.protecteddateA; //error:基类的保护成员在派生类中为保护成员,对对象不可见
    //a = objD.publicdateA;    //error:基类的公共成员在派生类中为保护成员,对对象不可见
    //objD.print_pri();
    //objD.print_pro();
    //objD.print_pub();

    return 0;
}

你可能感兴趣的:(C++私有、保护、公有继承)