public继承与protect

public是法定继承人,如果法定继承人公开继承了父类,那么父类的公库和个人银行
对于法定继承人是可以访问的,但是法定继承人不知道父亲的私生子。
公开继承时基类中各成员的属性不变,并且基类中的private被隐藏。派生类的
成员只能访问基类中的public/protected成员,不能访问private成员。派生类
的对象只能访问基类的public成员。

#include <iostream>
using namespace std;

class Base 
{
public:
    int public_mem;
protected:
    int prot_mem;
private:
    int pri_mem;
};

class Device :public Base  //派生类的成员函数公开继承基类的所有数据,这时派生类就可以自己去访问基类的protect了,也就是父类的protect权限对于派生
    //类是打开的,因此无论Base是公开亲自,还是带保镖去,还是偷偷摸摸去基类的受保护区域拿东西,只要是公开继承了,基类的受保护区域认识派生类,因此
    //随便怎么访问。
{
public:
    void fengwenBase(Base &base)  //在类外定义的对象只能访问public1接口
    {
        base.public_mem = 33;
    //    base.prot_mem = 33;   //在派生类的public定义一个基类对象,基类对象不能访问protect和private。
    }
    void fangwenDevice(Device &device)  //派生类public继承之后,基类的protected就是派生的protected
    {
        device.public_mem = 32;
        device.prot_mem = 11;
    }
protected:
    void fengwenBase_protected(Base &base)
    {
        base.public_mem = 33;
        //    base.prot_mem = 33;   //在派生类的public定义一个基类对象,基类对象不能访问protect和private。
    }
    void fangwenDevice_protected(Device &device)  //派生类public继承之后,基类的protected就是派生的protected
    {
        device.public_mem = 32;
        device.prot_mem = 11;
    }
private:
    void fengwenBase_private(Base &base)
    {
        base.public_mem = 33;
        //    base.prot_mem = 33;   //在派生类的public定义一个基类对象,基类对象不能访问protect和private。
    }
    void fangwenDevice_private(Device &device)  //派生类public继承之后,基类的protected就是派生的protected
    {
        device.public_mem = 32;
        device.prot_mem = 11;
    }
};

class Device1 :protected Base  //
{
public:
    void fengwenBase(Base &base)  //在类外定义的对象只能访问public1接口
    {
        base.public_mem = 33;
        //    base.prot_mem = 33;   //在派生类的public定义一个基类对象,基类对象不能访问protect和private。
    }
    void fangwenDevice(Device1 &device)  //派生类public继承之后,基类的protected就是派生的protected
    {
        //Device1.public_mem = 32;
        //Device1.prot_mem = 11;
    }
protected:
    void fengwenBase_protected(Base &base)
    {
        base.public_mem = 33;
        //    base.prot_mem = 33;   //在派生类的public定义一个基类对象,基类对象不能访问protect和private。
    }
    void fangwenDevice_protected(Device1 &device)  //派生类public继承之后,基类的protected就是派生的protected
    {
        //Device1.public_mem = 32;
        //Device1.prot_mem = 11;
    }
private:
    void fengwenBase_private(Base &base)
    {
        base.public_mem = 33;
        //    base.prot_mem = 33;   //在派生类的public定义一个基类对象,基类对象不能访问protect和private。
    }
    void fangwenDevice_private(Device1 &device)  //派生类public继承之后,基类的protected就是派生的protected
    {
        //Device1.public_mem = 32;
        //Device1.prot_mem = 11;
    }
};
void main()
{
    Base base;   //基类对象不能直接访问protected。基类对象只能访问公有成员
    
    Device device;  //派生类对象不能直接访问device
    device.public_mem = 11;  //基类成员对于派生类对象来说,只能访问公有成员

    
    system("pause");
}

猜你喜欢

转载自blog.csdn.net/zhizhengguan/article/details/81428443