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

加杰尔·哈迪克

在下面的代码中。为什么不调用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函数
来自打印函数
test的
析构函数base1的
析构函数base2的
析构函数base1的构函数

加杰尔·哈迪克

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么流程首先不进入基类构造函数?

C ++虚拟基类:不调用父级的副本构造函数

为什么渲染函数不调用反应?

当对象构造函数抛出新表达式时,为什么不调用释放函数?

为什么不调用在构造函数中作为参数传递的自由函数?

C ++ 11:带有std :: move()的'decltype类实例声明'不调用'move构造函数'。为什么?

为什么不调用move构造函数

(为什么)在纯虚拟派生类中是否需要虚拟基类构造函数调用?

为什么函数不调用左值

为什么必须调用基类构造函数?

为什么派生类可以调用基类构造函数两次?

为什么不调用模板化副本构造函数?

为什么super()仅调用类Parent1的构造函数而不调用类Parent2的构造函数?

为什么不调用继承类的析构函数?

为什么不调用我的基类中的静态构造函数?

为什么在函数返回时不调用复制构造函数?

基类函数不调用派生类函数

为什么此函数不调用move构造函数?

为什么不调用实现Runnable接口的类的构造函数?

为什么不能用const_iterator调用模板基类构造函数?

为什么不调用此函数?

基类构造函数为什么不设置值?

为什么我不能调用基类的构造方法?

为什么不是所有的基类构造函数都被调用?

为什么operator *不调用构造函数?

为什么 debounce 不调用我的函数?

为什么不调用 viewDidLoad 函数?

为什么不隐式调用基类的复制构造函数?

部分类构造函数不调用基类