zoukankan      html  css  js  c++  java
  • Effective C++ 条款39

    我从本条款中学到了下面内容:
    1.private继承不同于另外两种继承,派生类对象不能隐式转换为基类对象。

    例如以下代码:

    class Bird//鸟
    {
    
    };
    
    class ostrich:private Bird//鸵鸟
    {
    
    };
    
    int main()
    {
    Bird *b =  new ostrich();//编译不通过,基类不能转换为派生类
    
    }

    编译器明白指出基类是不可訪问的。所以转换失败。

    private继承在基类和派生类之间已经没有所谓的继承关系,之所以有它的存在纯粹是为应用层面服务,即为了编程的灵活性而存在的继承关系。

    2.例如以下代码。告诉我们private调用的优点,当存在一种特殊情况时。即base class 大小为空时,调用private继承能够使派生类占领的空间大小最小化。这时有人会说我定义的类不是空,为什么大小为1个字节。这里简单解释下。不论什么一个类的大小都不为空,即使你这样定义
    class m{};这个类的大小依旧为1,类的大小仅仅和变量有关。而且变量是非静态变量。静态变量不影响类的大小。

    #include<string>
    #include<iostream>
    using namespace std;
    class Bird//鸟
    {
    public:
        static string name;
        static string getName(){ return name; }
    };
    
    class ostrich:private Bird//鸵鸟
    {
    
    };
    
    int main()
    {
        int m1 = sizeof(Bird);//m1大小为1个字节
        int m2 = sizeof(ostrich);//m2大小也为1个字节
    
    }
  • 相关阅读:
    【算法】数据结构
    【POJ】1222 EXTENDED LIGHTS OUT
    【BZOJ】1013 [JSOI2008]球形空间产生器sphere
    【有上下界网络流】【ZOJ】2314 Reactor Cooling
    【CODEVS】1281 Xn数列
    【POJ】3070 Fibonacci
    【CODEVS】3546 矩阵链乘法
    【BZOJ】1070: [SCOI2007]修车
    Quoit Design(hdu 1007)
    tree(poj 1741)
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5192838.html
Copyright © 2011-2022 走看看