C++:虚继承(virtual inheritance) 详解2014-11-14在多重继承(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
作者:csdn博客 Spike_King