• 【C++ Primer | 15】访问控制与继承、继承中的类作用域


    1. 只有D继承B的方式是public时,用户代码才能使用派生类向基类的转换;如果D继承B的方式是受保护的或者私有的,则用户代码不能使用该转换。

    2. 不论D以什么方式继承B,D的成员函数和友员函数都能使用派生类向基类的转换;派生类向其直接基类的类型转换对于派生类的成员函数和友员函数来说永远是可访问的。

    1 class B {};
    2 class D : private B   //这里以private或者protected或者public 都可以
    3 {
    4     void f()
    5     {
    6         B * base = new D;   //编译正确
    7     }
    8 }

    如果不是成员函数(即用户代码),例如:

     1 class B {};
     2 class D : private B     //如果这里是public就可以,private或protected会错
     3 {
     4     void f()
     5     {
     6         B * base=new D;
     7     }    
     8 };
     9 
    10 int main()
    11 {
    12     B * b = new D;    //会出现编译错误,注意,这是用户代码
    13 };

    3. 如果D继承B的方式是public或者protected,则D的派生类的成员或者友员可以使用D向B的类型转换;反之,如果D继承B的方式是private,则不能使用。

     1 class B {};
     2 class D : public B {}; //public或protected都可以
     3 class E : private D    //或者protected D 或者public D
     4 {
     5     void f()
     6     {
     7         B *b = new D;   //可以编译通过
     8         D *d = new E;   //可以编译通过,这就是2介绍的情况。
     9     }
    10 };

    参考资料

  • 相关阅读:
    luoguP2016 战略游戏
    [Usaco2006 Nov]Corn Fields牧场的安排
    [Ahoi2009]self 同类分布
    POJ3208:Apocalypse Someday
    [usaco2010 Oct]Soda Machine
    [Usaco2005 Dec]Scales 天平
    PTA的Python练习题(十九)
    堆叠注入
    PHP序列化与反序列化(三)总结实战
    攻防世界web进阶1-12总结篇
  • 原文地址:https://www.cnblogs.com/sunbines/p/9671694.html
Copyright © 2020-2023  润新知