在以下代码中。为什么不调用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的破坏者
发布于 2019-01-10 11:30:06
解决了编译问题!如果我尝试在联机编译器中使用base2类的构造函数而没有调用,并且如果我试图在本地环境中使用g++编译器运行相同的构造函数,那么工作得很好。得到预期的输出。谢谢StoryTeller。
https://stackoverflow.com/questions/54127492
复制相似问题