繁体   English   中英

基类的多个虚拟继承和构造函数调用

[英]Multiple virtual inheritance and constructor call of base class

有这个代码:

#include <iostream>

class Bazowa
{
    int x;
public:
    Bazowa() : x(55){}
    Bazowa(int x_) : x(x_) {}
    void fun()
    {
      std::cout << x << "fun\n";
    }
};

class Pochodna1 : virtual public  Bazowa
{
public:
    Pochodna1() : Bazowa(101) {}
};

class Pochodna2 : virtual public  Bazowa
{
public:
    Pochodna2() : Bazowa(103) {}
};

class SuperPochodna : public Pochodna1, public Pochodna2
{
public:
    SuperPochodna() : {}
};


int main() {
    SuperPochodna sp; 
    sp.fun();     // prints 55fun

    return 0;
}

执行该程序后,将打印“55fun”。 在Pochodna1和Pochodna2类中构造函数调用发生了什么 - 它们被忽略了吗? 为什么班级Bazowa的成员'x'被设置为'55',而不是'101'或'103'?

始终从最终叶类调用虚拟基础构造函数。 不会调用虚拟基础的其他构造函数。 在你的情况下, SuperPochodna()调用Bazowa()并且不使用Pochodna1Pochodna2中对Bazowa(int)的调用。

请参阅http://www.parashift.com/c++-faq-lite/multiple-inheritance.html#faq-25.14或只是谷歌“虚拟基础构造函数”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM