捋清public protected private继承的访问权限问题

捋清public protected private继承的访问权限问题

写一个我认为的本质吧

继承的本质就是为了代码复用嘛,你可以理解为把基类的代码全部copy过来

只不过copy的时候可能要做修改嘛

那么怎么确定修改的方式呢?

答案是依据继承的类型

  • 如果是public继承 就把父类原封不动搬过来就好了(需要说明的是父类的private永远都不搬的) 父类的public还是public 父类的protected还是protected
  • 如果是protected继承 就和上面不一样了 它会把public改成protected protected照搬为protected
  • 如果是private继承 它会把 基类的public 和protected都改成private

好的.现在我们已经把基类的代码搬到子类了我们来看看效果

#include <iostream>
class B 
{
private:
    void pvB() { printf("pvB\n"); }
protected:
    void ptB() { printf("ptB\n"); }
public:
    void pbB() { printf("pbB\n"); }

};
class D: public B
{
    //_________________________
// 搬的时候注意要不要修改 我这里是public继承 所以没修改
protected:
    void ptB() { printf("ptB\n"); }
public:
    void pbB() { printf("pbB\n"); }
    //_______________________________
    
    
public:	
    void func() { ptB(); pbB(); }
protected:

private:

};

那么你看,

  • 在这个类D里,类作用域里,能访问的东西自然是 这个类里面的所有东西 对吧,由于我们已经把类B搬进来了 (你自然可以把他们看成这个类的成员 这也是为了我后面叙述更多层的继承做准备)

  • 那么 ,在类D之外 ,比如说main函数里,我们建一个D对象,能访问这个对象的什么呢? 自然是这个对象的public啦,这个对象的public自然还包括了继承得来的基类的public

至此,两层继承 类内类外的访问权限我们都可以轻易算出了

那么更多层次的继承呢 ,用上面的方法 再搬一次就好啦,对吧 哈哈哈

posted @ 2020-03-30 13:01  Yan_Hao  阅读(274)  评论(0编辑  收藏  举报