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
原创粉丝点击