| 发表于:2008-01-10 01:09:12 楼主 |
记得c++中建立一个对象使,如果对象中含有从虚基类继承来的成员,则虚基类的成员是由最远派生类的构造函数通过调用虚基类的构造函数进行初始化的。而且,只有最远派生类的构造函数会调用虚基类的构造函数,该派生类的其他基类对虚基类构造函数的调用都自动被忽略。 那么请看下面的代码 #include <iostream> using namespace std; class base { public: base(int i){cout < <i;} ~base(){} }; class base1:virtual public base { public: base1(int i,int j=0):base(j){cout < <i;} ~base1(){} }; class base2:virtual public base { public: base2(int i,int j=0):base(j){cout < <i;} ~base2(){} }; class derived:public base2,public base1 { public: derived(int a,int b,int c,int d):mem1(a),mem2(b),base1(c),base2(d),base(a) { cout < <b; } private: base2 mem2; base1 mem1; }; void main() { derived obj(1,2,3,4); } 运行结果为1430201 而不是我想的143212,说明base1和base2还是调用了虚基类的构造函数,这是为什么呢?和类的组合有关吗? 小弟刚学c++不久,知识不够扎实,望赐教! |
|
|
|
|