继承类的对象的析构函数执行
Destructor execution of object of an inherited class
我有以下两个类Programmer和CSstudent的示例代码,其中
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对象已销毁一个程序员对象被销毁
我知道析构函数不能被继承,当对象超出作用域时才调用析构函数。我初始化一个CSstudent对象,那么为什么程序员类的析构函数调用?
我希望得到这样的输出:CSstudent obj destroyed
派生类本质上包含基类。当构造派生类时,首先构造基类,然后构造派生类(这是有意义的,因为派生类需要使用它假定已正确初始化的基类变量)。析构函数则相反,首先调用派生类析构函数,然后调用基类析构函数来清除基类信息。
因为在内部创建CSstudent对象时,会创建一个Programmer对象。因此,当您删除CSstudent时,基对象也必须被删除。
相关文章:
- 为什么即使调用了析构函数,C++11 中的分离线程也可以执行
- 是否可以访问类数据成员并在析构函数中对它们执行操作?
- 程序按执行方式工作,直到我向其添加析构函数为止
- 如何在析构函数中执行一些代码*在*成员被销毁之后
- 析构函数如何执行?
- 在执行std::函数析构函数时调用它
- C++:程序的执行(构造函数、析构函数、赋值运算符等)
- 执行析构函数时,服务器应用程序总是崩溃
- C++类组合 - 何时执行构造函数和析构函数
- 赋值重载显式调用析构函数(在执行其他二进制重载运算符之后)
- 有没有办法让C++类在开始执行析构函数之前自动执行方法
- 在C++QObject子类中调用析构函数之前执行操作
- c++中构造函数和析构函数的执行顺序
- 继承类的对象的析构函数执行
- 停止执行而不跳过析构函数
- 链表析构函数与Valgrind一起执行,但不能单独执行
- 执行"delete this"时缺少虚拟析构函数
- 继承层次结构:构造函数和析构函数执行顺序
- 在析构函数中执行任务
- C++ - 在执行析构函数之前销毁对象