zoukankan      html  css  js  c++  java
  • C++继承

    首先,子类只能继承父类的public和protected成员。

    公有继承:基类的公有成员和保护成员作为派生类的公有成员和保护成员。

    私有继承:基类的公有成员和保护成员都作为派生类的私有成员。
    保护继承:基类的公有成员和保护成员都作为派生类的保护成员。
    *在子类中,父类的私有成员可以通过父类的public函数获得(只要这个父类的public函数在子类中没有被重写)
     
    虚继承。(virtual只用于两个地方:一个是虚函数,另一个就是虚继承)
    class A{
        char k[3];
    public: 
        virtual void aa(){};
    };
    class B: public virtual A{
        char j[3];
    public: 
        virtual void bb(){};
    };
    虚继承的关键字virtual高速编译器不事先绑定,在运行时才能进行定位访问。
    编译器对每个包含虚函数的类创建一个表(vtable),设置一个指针(vfptr)指向它。所以A的大小为char k[3]对齐后的4字节+vfptr的4字节,为8
    B虚继承了A,那么B中有一个虚类指针(vbptr_B_A)来指向其父类,然后还要包含父类的所有内容。所以B的大小是j[3]对齐后的4字节+指向B的vtable的虚指针vfptr的4字节+A的大小(8字节),为16。
    虚继承运用于多重继承,如:B,C都继承A,D继承自B和C,那么普通继承就是:
    A         A
            /
      B     C
          /
         D
    在类D中A重复出现,浪费内存空间,运用虚拟继承后:
        A
       /
      B   C
        /
        D
  • 相关阅读:
    openerp学习笔记 模块结构分析
    Odoo文档管理/知识管理应用实践
    POSTGRESQL DEFAULT TEMPLATE0 НА UTF8 ENCODING
    could not execute command lessc odoo
    XPath 元素及属性查找
    pycharm 使用心得(四)显示行号
    mimetypes.py的UnicodeDecodeError
    win7源码运行odoo8.0错误
    xUtils 中的BitmapUtils 全面注释
    Android初级到高级指南(精华版)
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/4620262.html
Copyright © 2011-2022 走看看