建立一个类的继承类,然后实例化之后来观察该对象的构造和析构函数的调用顺序。

首先我们建造一个People.h头文件:

#ifndef INHERIT_PEOPLE_H
#define INHERIT_PEOPLE_H

#include <string>

using namespace std;
class People{
public:
    int m_iAge;
    string m_strName;
    void eat();
    People();
    ~People();
};
#endif //INHERIT_PEOPLE_H

然后是其对应的实现,People.cpp文件:

每个函数的具体实现都很简单,只是输出函数名称,体现出我们调用了该函数。

#include \"People.h\"
#include <iostream>
using namespace std;

People::People() {
    cout<<\"People()\"<<endl;
}
People::~People() {
    cout<<\"~People()\"<<endl;
}
void People::eat() {
    cout<<\"eat()\"<<endl;
}

公有继承类Worker,其Worker.h头文件如图所示:

#ifndef INHERIT_WORKER_H
#define INHERIT_WORKER_H

#include \"People.h\"

class Worker:public People{
public:
    Worker();
    ~Worker();
    void work();
    int m_iSalary;
};
#endif //INHERIT_WORKER_H

实现为Worker.cpp,每个函数的具体实现都很简单,只是输出函数名称,体现出我们调用了该函数。

#include \"Worker.h\"
#include <iostream>
using  namespace std;
Worker::Worker() {
    cout<<\"Worker()\"<<endl;
}
Worker::~Worker() {
    cout<<\"~Worker()\"<<endl;
}
void Worker::work()  {
    cout<<\"work()\"<<endl;
}

执行main.cpp,

#include <iostream>
#include \"People.h\"
#include \"Worker.h\"
using namespace std;
int main() {
    Worker a;
    a.eat();
    a.work();
    return 0;
}

执行结果为:

由结果可以看出,当我们实例化一个继承类对象时,先调用基类的构造函数,然后再调用继承类的构造函数。

析构时,则相反,先析构继承类,然后在调用基类析构函数。

People()
Worker()
eat()
work()
~Worker()
~People()

进程已结束,退出代码 0

 

收藏 打印