【发布时间】:2016-01-26 00:06:13
【问题描述】:
我有以下两个类的示例代码 Programmer 和 CSstudent where
CSstudent:public Programmer
为这两个类定义了析构函数:
class Programmer{
.........
public:
~Programmer(){
cout<<"A Programmer obj destroyed";
}
}
class CSstudent:public Programmer{
.........
public:
~CSstudent(){
cout<<"CSstudent obj destroyed";
}
}
现在在 main() 中:
int main(){
CSstudent cs1;
/* call to CSstudent member functions by invoking the cs1 object
........... */
cout<<cs1.getName()<<cs1.getUni()<<cs1.getLang()<<endl;
}
程序运行后,我得到以下信息: CSstudent 对象被销毁 一个 Programmer obj 被销毁
我知道析构函数不是继承的,当对象超出范围时会调用析构函数。我初始化了一个 CSstudent 对象,那么为什么调用 Programmer 类的析构函数呢?
我希望得到这样的输出: CSstudent obj 被销毁
【问题讨论】:
-
基类也必须被销毁。它的析构函数运行,以便它可以处理基类中的任何潜在资源。
-
你要求这个...学生继承自程序员,因此当你创建一个学生时,你还必须创建一个程序员。从这里开始,一旦你摧毁了一个学生,你也必须摧毁一个程序员。尝试在构造函数中放置相同的打印语句。
-
我强烈建议阅读一本关于 C++ 的书。
-
基类的析构函数也应该声明为
virtual,以便通过基类指针删除派生实例。 -
修改@SergeyA 的评论:确保它是a good book on C++。太多是由精通 C 或 Java 的人编写的,并且似乎假设 1:1 对应。
标签: c++ c++11 destructor