virtual base classes
来源:互联网 发布:程序员写博客的好处 编辑:程序博客网 时间:2024/05/20 01:45
virtual base classes用来实现菱形继承解决多个重复subobject的问题
//: C09:VirtualBase.cpp// Shows a shared subobject via a virtual base.#include <iostream>using namespace std;class Top{protected: int x;public: Top(int n) { x = n; } virtual ~Top() {} friend ostream& operator<<(ostream& os, const Top& t) { return os << t.x; }};class Left : virtual public Top{protected: int y;public: Left(int m, int n) : Top(m) { y = n; }};class Right : virtual public Top{protected: int z;public: Right(int m, int n) : Top(m) { z = n; }};class Bottom : public Left, public Right{ int w;public: Bottom(int i, int j, int k, int m) : Top(i), Left(0, j), Right(0, k) { w = m; } friend ostream& operator<<(ostream& os, const Bottom& b) { return os << b.x << ',' << b.y << ',' << b.z << ',' << b.w; }};int main(){ Bottom b(1, 2, 3, 4); cout << sizeof b << endl; cout << b << endl; cout << static_cast<void*>(&b) << endl; Top* p = static_cast<Top*>(&b); cout << *p << endl; cout << static_cast<void*>(p) << endl; cout << dynamic_cast<void*>(p) << endl; return 0;} ///:~
输出结果:
281,2,3,40043FABC10043FAD00043FABC对象大小与实现有关,28 = 4 * 4 + 2 * 4 + 1 * 4(大概是4个int,2个ptr to virtual base,1 个vptr)
注意Bottom里初始化Top的方式,Left、Right给出的对应参数会被编译器巧妙地忽略
内容源自:《TICPP-2nd-ed-Vol-two》
0 0
- virtual base classes
- polymorphic base classes(多态基类)中将 destructors声明为 virtual
- Item7: Declare destructors virtual in polymorphic base classes
- Some tips about Abstract base classes and pure virtual functions
- 7. Declare destructors virtual in polymorphic base classes.
- 条款07:为多态基类声明virtual析构函数(Declare destructors virtual in polymorphic base classes.)
- Item 7 (多态中基类的虚析构函数)Declare destructors virtual in polymorphic base classes
- 15.4. Abstract Base Classes
- Item 7: 在 polymorphic base classes(多态基类)中将 destructors(析构函数)声明为 virtual(虚拟)
- 虚基类(Virtual Base Class)
- virtual base class
- C# virtual, base, override
- Python - abc (Abstract Base Classes)
- websphere mq java base classes
- Defining Base and Derived Classes
- [翻译] Effective C++, 3rd Edition, Item 7: 在 polymorphic base classes(多态基类)中将 destructors(析构函数)声明为 virtual(虚拟)
- 虚基类(virtual base class)
- C++虚基类(virtual base class)
- 如何在微网站上设置在线客服QQ
- 【LeetCode】Merge Sorted Array
- C# 3.0新特性之扩展方法
- 黑马程序员 java TCP ServerSocket Socket File 通过网络保存文件
- MVC简析
- virtual base classes
- ListView实例
- Android Action Bar 详解篇
- 实作一个简单自定义的View(一) -- A Simple Custom View Example (1)
- 流程优化辨析
- IPython notebook搭建
- 获取DNS污染被墙域名的IP地址
- 调试pcb板子的步骤
- matlab中的unique