为什么析构函数会因为的对象的不同而不同,构造函数则都是Base0的呢?

class Base0{
	public:
		int var0;
		Base0ini()
		{
			cout<<"Base0的构造函数"<<endl; 
		}
		~Base0()
		{
			cout<<"Base0的析构函数"<<endl; 
		}
		void fun0()
		{
			cout<<"Member of Base0"<<endl;
		}
};

class Base1:virtual public Base0{
	public:
		int var1;
		Base1ini()
		{
			cout<<"Base1的构造函数"<<endl; 
		}
		~Base1()
		{
			cout<<"Base1的析构函数"<<endl; 
		}
};

class Base2:virtual public Base0{
	public:
		int var2;
		Base2ini()
		{
			cout<<"Base2的构造函数"<<endl; 
		}
		~Base2()
		{
			cout<<"Base2的析构函数"<<endl; 
		}
};

class Derived:public Base1,public Base2{
	public:
		int var;
		void fun()
		{
			cout<<"Menber of Derived"<<endl;
		}
		Derivedini()
		{
			cout<<"Derived的构造函数"<<endl;
		} 
		~Derived()
		{
			cout<<"Derived的析构函数"<<endl;
		} 
};

void funTest(Base0 &b)
{
	b.Base0ini();
	b.~Base0();
	b.fun0();
}

int main() {
	Base0 b0;
	Base1 b1;
	Base2 b2;
	Derived d;
	funTest(b0);
	funTest(b2);
	funTest(b1);
	funTest(d);
	return 0;
}

结果如下

Base0的构造函数
Base0的析构函数
Member of Base0
Base0的构造函数
Base0的析构函数
Member of Base0
Base0的构造函数
Base0的析构函数
Member of Base0
Base0的构造函数
Base0的析构函数
Member of Base0
Derived的析构函数
Base2的析构函数
Base1的析构函数
Base0的析构函数
Base2的析构函数
Base0的析构函数
Base1的析构函数
Base0的析构函数
Base0的析构函数

 

你这代码看不懂啊。构造函数和类名不一样;直接调用虚函数。你这输出也不合理啊,main中定义 Base1 b1的时候不调用Base1的构造函数吗?

构造函数是先调用父类的构造函数,然后再调用自己的构数,析构函数正好相反,所以你在实例化子类的时候,都是先打印调用父类的构造函数,再打印调用自己的构造函数。如有帮助,请采纳一下,谢谢。