归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏? + 留言?📝
站在巨人的肩上,是为了超过巨人!
一起加油!
????????基类的析构函数也不能被派生类继承。派生类对象生存期结束时,需要调用析构函数完成对象清理工作,因此派生类需要定义自己的析构函数。由于派生类继承了基类的成员,基类成员的清理工作应该由基类的析构函完成。因此,编译系统在对派生类对象进行析构时,首先会调用派生类自身的析构函数对派生类自己添加的成员进行清理,然后再调用基类的析构函数,对从基类继承过来的成员进行清理,这种调用是由系统自动完成的。由于析构函数没有参数,因此派生类析构函数的形式非常简单。
????????析构函数的调用顺序是: 先调用派生类自己的析构函数,再调用对象成员类的析构函数(如果派生类中有对象成员),最后调用基类的析构函数,其调用顺序与调用构造函数的顺序刚好相反。
#include<iostream>
using namespace std;
#include<cstring>
class Person{
public:
Person(char *pName,int pAge,char pSex){
name=new char[strlen(pName+1)];
strcpy(name,pName);
age=pAge;
sex=pSex;
}
~Person(){
cout<<"Destruct Person"<<endl;
delete[]name;
}
char *GetName(){
return name;
}
int GetAge(){
return age;
}
char GetSex(){
return sex;
}
void print(){
cout<<"姓名:"<<name<<endl;
cout<<"年龄:"<<age<<endl;
cout<<"性别:"<<sex<<endl;
}
private:
char *name;
int age;
char sex;
};
class Student:public Person{
public:
Student(char*pName,int pAge,char pSex,char *pID,double pScore):Person(pName,pAge,pSex){
ID=new char[strlen(pID+1)];
strcpy(ID,pID);
score=pScore;
}
~Student(){
delete[]ID;
cout<<"Destruct Student"<<endl;
}
char *GetID(){
return ID;
}
double GetScore(){
return score;
}
void print(){
Person::print();
cout<<"学号:"<<ID<<endl;
cout<<"分数:"<<score<<endl;
}
private:
char *ID;
double score;
};
int main(){
Student s("李华",18,'F',"20230011",95);
s.print();
return 0;
}
????????在程序即将运行完毕时,s 的生存期即将结束,系统自动调用 s 的析构函数~Student()。由于类 Student 是派生类,所以在执行完派生类的析构函数之后,系统会去执行其基类的析构函数~Person()。因此,程序先输出“Destruct Student”,再输出“Destruct
Person”。
????????以上就是我对C++继承与派生——(6)派生类的析构函数的理解,希望本篇文章对你有所帮助,也希望可以支持支持博主,后续博主也会定期更新学习记录,记录学习过程中的点点滴滴。如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对C++继承与派生的理解,请持续关注我哦!!!?