虚表和菱形虚拟继承
来源:互联网 发布:淘宝定价策略案例 编辑:程序博客网 时间:2024/05/10 07:53
虚表和菱形虚拟继承
c++中虚函数的主要作用就是实现多态,简单说父类的指针/引用调用重写的虚函数,当父类指针/引用指向父类对象时调用的是父类的虚函数,指向子类对象时调用的是子类的虚函数。virtual就是为了解决继承的二义性问题。
1.继承,继承是面向对象复用的重要手段。通过继承定义一个类,继承是类型之间的关系建模,共享公有的东西,实现各自本质不同的东西。继承可以是单一继承或多重继承,每一个继承连接可以是public,protecte,private。
单继承--一个子类只有一个直接父类时称这个继承关系为单继承;
多继承--一个子类有两个或以上直接父类时称这个继承关系为多继承;
2.多态
a.静态多态就是重载,因为是在编译期决议确定,所以称为静态多态。
b.动态多态就是通过继承重写基类的虚函数实现的多态,因为是在运行时决议确定,所以称为动态多态。
3.菱形虚拟继承
菱形虚拟继承的模式
class A;
class B : virtual public A;
class C : virtual public A;
class D : public B , public;
单一的虚拟继承
a.
class Base{private:int _a;};class Derived : virtual public Base{};
虚拟继承时,在派生类的对象内存中会产生一个指向虚基表的指针,所以
sizeof(Base )=4; sizeof(Base ) = _a;
sizeof(Derived )=8; sizeof(Derived ) =_a + Derived 中的指向虚基表的指针;
b.
class Base { public: virtual void funl() { cout << "Base::fun1()" << endl; } private: int _a; }; class Derived : virtual public Base { public: virtual void funl() { cout << "Derived::fun1()" << endl; } virtual void Derivedfun2() { cout << "Derived::Derivedfun2()" << endl; } };
虚基类的虚表指针是不会被派生类所共享的,若派生类中含有新的虚函数(改写的不算),将会自己产生一个指向自己虚表的指针
sizeof(Base) =_a + Base 中 指向 虚函数表的指针
sizeof(Base) =8;
sizeof(Derived ) =Derived 的虚函数表指针 + Derived 中的指向虚基表的指针 + Base的虚函数表指针+_a
sizeof(Derived) =16;
- C++: 虚表和菱形虚拟继承
- 虚表和菱形虚拟继承
- 菱形继承和菱形虚拟继承探索
- C++菱形继承和菱形虚拟继承
- 继承,菱形继承,多态,虚继承、菱形虚拟继承
- C++:菱形继承和虚拟继承
- 菱形虚拟继承和菱形继承的对比
- 菱形继承&菱形虚拟继承
- 菱形继承&菱形虚拟继承
- 菱形继承--菱形虚拟继承
- 菱形继承和菱形虚继承
- 研究菱形虚拟继承和虚表(探索多态的原理)
- 研究虚表(探索多态的原理)和菱形虚拟继承
- 研究虚表(探索多态的原理)和菱形虚拟继承
- 研究虚表(探索多态的原理)和菱形虚拟继承
- 虚拟继承和菱形虚拟继承的剖析
- 菱形虚拟继承和多态
- 菱形虚拟继承&虚函数表&对象模型
- Spring注解
- java 代理模式 jdk动态代理
- Linux下gdb调试用法命令
- 查找二叉树的实现-镜像、层序,先序非递归实现
- 主成分分析(PCA)
- 虚表和菱形虚拟继承
- Launcher3 壁纸分析
- seetaface facedetect测试记录
- MySQL触发器简单介绍及使用实例
- 数据结构队列
- 为什么qq用的UDP为主,而TCP为辅助
- spring-DefaultConversionService
- Android 夜间模式的实现(一)
- [python]unicode,utf8