C++ - 虚继承(virtual inheritance) 详解
来源:互联网 发布:linux服务器防御 编辑:程序博客网 时间:2024/06/05 15:15
虚继承(virtual inheritance) 详解
本文地址: http://blog.csdn.net/caroline_wendy/article/details/23739633
在多重继承(multiple inheritance)中, 可能出现多个基类继承自同一个基类, 即"菱形继承", 会导致最顶层的基类, 被复制多次;
可以采用虚继承(virtual inheritance)的方式, 使派生类(derived class)只保留最顶层基类的一个副本.
virtual, 即需要vptr(virtual table pointer), 即虚表指针, 额外占用4个字节;
代码如下:
/* * test.cpp * * Created on: 2014.04.14 * Author: Spike *//*eclipse cdt, gcc 4.8.1*/#include <iostream>#include <string>using namespace std;class File {private: int i[10];};class InputFile : public File {};class OutputFile : public File {};class IOFile : public InputFile, public OutputFile {};class vInputFile : virtual public File {};class vOutputFile : virtual public File {};class vIOFile : public vInputFile, public vOutputFile {};int main () {std::cout << "File = " << sizeof(File) << std::endl;std::cout << "InputFile = " << sizeof(InputFile) << std::endl;std::cout << "OutputFile = " << sizeof(OutputFile) << std::endl;std::cout << "IOFile = " << sizeof(IOFile) << std::endl;std::cout << "virtual InputFile = " << sizeof(vInputFile) << std::endl;std::cout << "virtual OutputFile = " << sizeof(vOutputFile) << std::endl;std::cout << "virtual IOFile = " << sizeof(vIOFile) << std::endl;}
输出:
File = 40InputFile = 40OutputFile = 40IOFile = 80virtual InputFile = 44virtual OutputFile = 44virtual IOFile = 48
3 0
- 虚继承(virtual inheritance) 详解
- C++ - 虚继承(virtual inheritance) 详解
- C++虚继承 (virtual inheritance)
- C++ - 虚继承(virtual inheritance)
- inheritance,菱形继承, 虚继承,virtual
- c++中virtual inheritance详解
- C++Notes06_继承(Inheritance)
- C++ 多继承和虚继承的内存布局(Memory Layout for Multiple and Virtual Inheritance)
- C++ 多继承和虚继承的内存布局(Memory Layout for Multiple and Virtual Inheritance )
- virtual inheritance
- Virtual Inheritance
- Virtual Inheritance
- virtual inheritance
- C++ - 在容器(container)中 使用继承(inheritance)和虚函数(virtual function)
- C++ - 在容器(container)中 使用继承(inheritance)和虚函数(virtual function)
- C++ - 虚继承(virtual inheritance)的构造(construct)和析构(destruct)顺序
- virtual inheritance(解决多几继承中的diamond problem)
- Python - 继承(Inheritance) 详解 及 代码
- 第6周作业3-Fibonacci数列(网络131黄宇倩)
- 如何在Linux下安装和配置phpMyAdmin?
- 探究中水回用工艺中反渗透装置的操作工艺
- 关于函数返回值的一些见解
- ASP.NET CS0433错误解决办法
- C++ - 虚继承(virtual inheritance) 详解
- UI控件----ProgressBar进度条 实例总结
- 我的声音在笑泪在飙
- Python+Django+SAE系列教程5-----使用存储器cpickle
- USB的工作原理
- Android之Service学习篇一:Service启动方式之startService
- MariaDB数据库安装、配置
- c# use Visual Studio Command create xml's serialitation file by xml file
- 按照周五到周四算做一周