为什么不调用基类2的构造函数?

时间:2019-01-10 11:15:23

标签: c++

在以下代码中。为什么不调用base2类的构造函数?任何帮助表示赞赏。

我尝试链接“钻石问题”,但仍不清楚。

#include <iostream>

using namespace std;

class base {
public:
     base(){print1();};

     ~base(){std::cout << "Destructor of base1" << std::endl;};

     void print1(void) const
     {
         std::cout << "From print1 function" << std::endl;
     }
};

class base2:public base {
public:
     base2(){print1();};

     ~base2(){std::cout << "Destructor of base2" << std::endl;};

     void print1(void) const
     {
         std::cout << "From print2 function" << std::endl;
     }
};

class test: virtual public base2, public base {
    int a;
public:
    int b;
    test(){b = 0; print();};

    ~test(){ std::cout << "Destructor of test" << std::endl;};

     void print(void) const
     {
         //print1();
         //a++;
         std::cout << "From print function" << std::endl;
     }
};

int main()
{
    const test *t1 = new test();
  //  t1->print();
    delete t1;
    //cout<<"Hello World: " << t1->b;

    return 0;
}

通过print1函数
来自打印功能
测试的破坏者
base1的析构函数
base2的析构函数
base1的析构函数

1 个答案:

答案 0 :(得分:0)

已解决,编译器问题!如果我在联机编译器中尝试过,则不会调用base2类的构造函数,并且如果我尝试使用g ++编译器在本地环境中运行相同的程序,则效果会很好。获得预期的输出。谢谢StoryTeller。

相关问题