zoukankan      html  css  js  c++  java
  • 捋清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
    "); }
    protected:
        void ptB() { printf("ptB
    "); }
    public:
        void pbB() { printf("pbB
    "); }
    
    };
    class D: public B
    {
        //_________________________
    // 搬的时候注意要不要修改 我这里是public继承 所以没修改
    protected:
        void ptB() { printf("ptB
    "); }
    public:
        void pbB() { printf("pbB
    "); }
        //_______________________________
        
        
    public:	
        void func() { ptB(); pbB(); }
    protected:
    
    private:
    
    };
    
    

    那么你看,

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

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

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

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

  • 相关阅读:
    前端知识之JavaScript内容(一)
    前端2css层叠样式表
    前端:html初识以及标签
    css
    python--re模块(正则表达式)
    python--xml模块
    关于导包问题
    前端浅了解
    试写仿优酷系统坑点
    sqlalchemy
  • 原文地址:https://www.cnblogs.com/yahoo17/p/12597913.html
Copyright © 2011-2022 走看看