#include <iostream>
using namespace std;
class A
{
public:
// 第一步:执行类A的构造函数,输出"构造函数A"
A() { cout << "构造函数A" << endl; }
virtual void func()
{
cout << "构造A" << endl;
}
// 第七步:执行类A的析构函数,输出"析构函数A"
~A() { cout << "析构函数A" << endl; }
virtual void fund()
{
cout << "清除A" << endl;
}
};
class B : public A
{
public:
// 第二步:执行类B的构造函数,调用类A里虚函数,输出"构造A"
B() { func(); }
// 第四步:执行主函数里的c.fun(),输出"开始...",并调用func();
// 由于fun()不是构造函数和析构函数,且func()为虚函数
// 所以最终结果输出"开始...类C"
void fun()
{
cout << "开始...";
func();
}
// 第六步:执行类B的析构函数,调用fund()函数;
// 由于是在析构函数里,且fund()为虚函数,所以执行类A里的fund();
// 输出清除A
~B() { fund(); }
};
class C : public B
{
public:
// 第三步:执行类C的构造函数,输出"构造函数C"
C()
{
cout << "构造函数C" << endl;
}
void func()
{
cout << "类C" << endl;
}
// 第五步:执行类C的析构函数,输出"清除C"
~C() { fund(); }
void fund()
{
cout << "清除C" << endl;
}
};
int main()
{
C c;
c.fun();
return 0;
};
来源:CSDN
作者:aiguangyuan
链接:https://blog.csdn.net/weixin_40629244/article/details/104130632