cppTest-8.2:虚析构函数探究&父类和子类的构造函数与析构函数的调用顺序
来源:互联网 发布:天盾数据恢复中心 编辑:程序博客网 时间:2024/05/21 19:33
/** *cppTest-8.2:虚析构函数探究&父类和子类的构造函数与析构函数的调用顺序 * @@总结: 构造函数调用顺序: 基类->子类->子类的子类...... 析构函数调用顺序:基类<-子类<-子类的子类...... *author 炜sama */#include<iostream.h>class color{public://构造函数不能定义为虚函数!color(){cout<<"color()"<<endl;}//@@如果这里的释放函数不是虚函数,那么对于delete p[0]、delete p[1]、delete p[2],//都只调用color的释放函数,因为p[i]是color类指针。//这将导致实际为red和bright_red类对象编写的释放函数没有得到正确的调用而不能释放它们的类对象。virtual ~color(){cout<<"~color()"<<endl;}};class red:public color{public:red(){cout<<"red()"<<endl;}~red(){cout<<"~red()"<<endl;}};class bright_red:public red{public:bright_red(){cout<<"bright_red()"<<endl;};~bright_red(){cout<<"~bright_red()"<<endl;};};void main(){color *p[3];cout<<"新建对象,观察构造函数的调用顺序:"<<endl;//@@1构造函数调用顺序为从最基类到子类!!!p[0]=new red;p[1]=new bright_red;p[2]=new color;cout<<"删除对象,观察析造函数的调用顺序:"<<endl;//@@虚析构函数调用顺序与上面相反!!!delete p[0];//在调用color的释放函数前调用red的释放函数delete p[1];//在~color()和~red()调用前调用~bright_red()delete p[2];//调用~color()//如果把父类的虚析构函数的virtual去掉,上面的情况就完全不同了:只会调用color的析构函数!cout<<"red对象指针指向red对象的情况"<<endl;red *r=new red;//同@@1delete r;//不管父类析构函数是否为虚函数,这里的效果都不变:从子类到父类的顺序调用析构函数。可见虚析构函数主要在多态时起作用!}
0 0
- cppTest-8.2:虚析构函数探究&父类和子类的构造函数与析构函数的调用顺序
- 子类调用父类构造函数和析构函数的顺序
- 关于父类与子类的构造函数调用顺序
- 子类调用父类构造和析构函数的顺序
- C++ 子类调用父类构造和析构函数的顺序
- 基类构造析构函数、子类构造析构函数和子类成员变量构造析构函数的调用顺序
- c++ 子类父类 的构造函数调用顺序
- c++中 子类父类的构造函数调用顺序
- c++ 子类父类 的构造函数调用顺序
- 子类父类 构造函数和析构函数的执行顺序
- 类的构造函数与析构函数调用顺序
- 类的析构函数和构造函数调用顺序
- 关于基类指针指向子类对象,构造函数和析构函数调用的顺序的问题。
- 子类父类构造函数调用顺序
- 子类调用父类的构造函数
- 子类调用父类的构造函数
- 浅谈构造函数与析构函数的调用顺序
- 浅谈构造函数与析构函数的调用顺序
- JVM简介
- 中心化副本控制协议:primary-secondary协议
- 《实用OpenCV》<四> 图像和GUI窗口的基本操作(1)
- 使用gdb调试段错误(segment fault)
- 动态规划之背包问题(一)
- cppTest-8.2:虚析构函数探究&父类和子类的构造函数与析构函数的调用顺序
- 段错误调试
- ASP.NET Entity Framework 查询数据表多个"s"的解决方法。
- 五大常用算法之二:动态规划算法
- POJ 2115 C Looooops
- 我的第一次项目需求调研
- .net页面事件顺序
- 动态规划经典五题
- ASP.NET跨页面传值技巧总结