多继承的结构有时候可能会非常复杂,例如一个派生类从同一个间接基类继承了多次 #include <iostream> using namespace std; class BC { public: BC(){cout << "BC" << endl;} float x; }; class BC1:public BC { public: BC1(){cout << "BC1" << endl;} int x; }; class BC2:public BC { public: BC2(){cout << "BC2" << endl;} int x; }; class DC:public BC1,public BC2 { public: DC(){cout << "DC" << endl;} int x; }; int main(void) { DC t; //t.x = 1; //t.BC::x = 20.2; //cout << t.x << endl; //cout << t.BC::x << endl; return 0; } 输出的结果是: BC BC1 BC BC2 DC DC类通过两次继承了BC类,获得了两份相同数据,一份是从BC1类,另一份是从BC2。这样会造成资源浪费将BC1和BC2改为虚基类可以解决该问题。 #include <iostream> using namespace std; class BC { public: BC(){cout << "BC" << endl;} float x; }; class BC1:virtual public BC { public: BC1(){cout << "BC1" << endl;} int x; }; class BC2:virtual public BC { public: BC2(){cout << "BC2" << endl;} int x; }; class DC:public BC1,public BC2 { public: DC(){cout << "DC" << endl;} int x; }; int main(void) { DC t; //t.x = 1; //t.BC::x = 20.2; //cout << t.x << endl; //cout << t.BC::x << endl; return 0; } 更改后输出的结果是: BC BC1 BC2 DC 经过这样的处理后DC中只存在一份BC的拷贝,将BC1和BC2声明为DC的虚基类,就是说仅将一份同名的拷贝存入 DC中