在以下代码中。为什么不调用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的析构函数
答案 0 :(得分:0)
已解决,编译器问题!如果我在联机编译器中尝试过,则不会调用base2类的构造函数,并且如果我尝试使用g ++编译器在本地环境中运行相同的程序,则效果会很好。获得预期的输出。谢谢StoryTeller。