本文共 1347 字,大约阅读时间需要 4 分钟。
如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中声明的名字进行访问时,可能产生二义性
分析:
总结:
的基类,则在对该基类中声明的名字进行访问时,可能产生
二义性
汇合点,这个公共基类就会在派生类的对象中产生多个基类子对象
声明为虚继承,使这个基类成为虚基类。
实验:注意增加virtual关键字后,构造函数调用的次数。
伪代码如下:
#includeusing namespace std;class B{public: B() { cout << "B构造函数" << endl; //采用了虚继承之后,尽管有多个子类,但是只会调用一次最基类的构造函数,避免了在子类中生成多个基类的对象 } int b;protected:private:};class B1 : virtual public B{public: B1() { cout << "B1构造函数" << endl; } int b1;};class B2 : virtual public B{public: B2() { cout << "B2构造函数" << endl; } int b2;};class C : public B1, public B2{public: C() { cout << "C构造函数" << endl; } int c;};void main(){ C c1; c1.b1 = 100; c1.b2 = 200; c1.c = 300; c1.b = 500; //继承的二义性 和 虚继承解决方案 //c1.B1::b = 500; //c1.B2::b = 500; cout << "hello..." << endl; system("pause"); return;}/**输出:B构造函数 B1构造函数B2构造函数C构造函数*/
转载地址:http://irzmi.baihongyu.com/