C++编译器:虚基类及其派生类的构造函数

来源:互联网 发布:被冒名网络贷款怎么办 编辑:程序博客网 时间:2024/04/27 08:45

 

C++编译器:虚基类及其派生类的构造函数

     如果虚基类中声明了非默认形式的构造函数,并且没有声明默认形式的构造函数,那么在整个继承关系中,直接或间接继承虚基类的所有派生类,都必须在构造函数的成员初始化类表中列出对虚基类的初始化。

 

输出:A1::display()...1

      看起来在建立C1的对象时有三次初始化A1的ia1数据成员,但编译器采取了也个策略是上述问题不会发生:

     上例建立对象c1时,D1就是最远派生类。

      建立一个对象时,如果这个对象中含有从虚基类继承来的成员,则虚基类的成员由最远派生类的构造函数通过条用虚基类的构造函数进行初始化,该类的其他派生类对虚基类构造函数的调用自动被忽略。(上列中B1,B2)

      可将上述4个注释行前后内容对换测试。

      输出 A1::display()...0

      可是编译器为什么要使用这种策略?在上述例子中假如编译器不使用这种策略

 21行语句 :C1(int i):B1(i),B2(i),A1(i){}  能否能其他方式实现虚基类的初始化?假如能实现会带来什么问题?