C# · 12月 20, 2021

C++学习之继承类对象的构造与析构顺序

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

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

#ifndef INHERIT_PEOPLE_H

#define INHERIT_PEOPLE_H

#include

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

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

using namespace std;

Worker::Worker() {

cout<<"Worker()"<<endl;

}

Worker::~Worker() {

cout<<"~Worker()"<<endl;

}

void Worker::work() {

cout<<"work()"<<endl;

}

执行main.cpp,

#include

#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