C++ virtual inheritance initializer list

前端 未结 2 1075
清歌不尽
清歌不尽 2021-01-05 03:50

in the following code:

class A
{
public:
    int x;
    A(int x):x(x){}
};

class B: public virtual A
{
public:
    B(int x):A(x){}
};
class C: public virtua         


        
2条回答
  •  长发绾君心
    2021-01-05 04:28

    Virtual base classes are only initialised by the most-derived class. That is, if create an instance of D in your example, A will only be initialised by its occurence in the mem-initialiser list of D. Its occurence in the mem-initialiser lists of B and C is simply ignored.

    That is also why you have to initialise A in D: A doesn't have a default ctor, so D must know how to initialise it.

提交回复
热议问题