类继承中构造函数和析构函数的调用

类继承中构造函数和析构函数的调用

ID:13786199

大小:34.50 KB

页数:7页

时间:2018-07-24

类继承中构造函数和析构函数的调用_第1页
类继承中构造函数和析构函数的调用_第2页
类继承中构造函数和析构函数的调用_第3页
类继承中构造函数和析构函数的调用_第4页
类继承中构造函数和析构函数的调用_第5页
资源描述:

《类继承中构造函数和析构函数的调用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、类继承中构造函数和析构函数的调用作者:   来源:CSDN   点击:119   日期:2007-4-2616:45:44   类继承中构造函数和析构函数的调用现在,有三个类,类的定义如下classCA{public: CA(){cout<<"CAconstructor"<

2、assCC:publicCB{public: CC(){cout<<"CCconstructor"<

3、uctor靠,太简单了,一个鸡蛋飞过来了,:(继续……………………(2)再做第二个试验之前,先做一点小小修改~CA(){cout<<"CAdesstructor"<>>virtual ~CA(){cout<<"CAdesstructor"<

4、r但是如果把virtual ~CA(){cout<<"CAdesstructor"<

5、数要设置成虚拟的,有些类虽然是基类,但是不是用于多态的,没有虚函数,没有被设计成允许经由基类接口派生类对象进行操作,那么也无需设成虚析构函数,毕竟增加了开销,好了,解释清楚了,我们也知道怎么做了,继续试验(3)保留CA中的虚析构函数修改main代码如下intmain(){  CB*p=newCC();  deletep;  return0;}运行结果CAconstructorCBconstructorCCconstructorCCdesstructorCBdesstructorCAdesstructor取消CA中的虚析构函数,那么,CA,CB,CC中没有虚析构函数

6、那么3中代码运行结果如下CAconstructorCBconstructorCCconstructorCBdesstructorCAdesstructor只调到CB的析构哦,继续试验,CA,CB,CC中,只有CB是虚析构函数3中代码运行如下CAconstructorCBconstructorCCconstructorCCdesstructorCBdesstructorCAdesstructor所以,如果是CB指向派生类,只要CB或者其基类中存在虚析构函数,那么也是所有的析构函数都调用的了继续………………(4)修改main代码如下intmain(){  CA*p=n

7、ewCC();  deletep;  return0;}如果A的析构函数是虚的,那么情况如2,不多说了如果是CA的析构函数不是虚的,而CB或者CC的析构函数是虚拟的,那么在调用deletep;会出现内存错误Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)  是在释放内存的时候出现这样的错误上网查了一下,_BLOCK_TYPE_IS_VALID是用来检测内存有效性宏中的一个,这个错误说明指针使用出现了问题后来想了一想,应该是因为继承类中出现了虚函数,所以多了一个指向虚函数表的指针,而基类中一个虚函数都没有,所以也没有

8、这个指针啦

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。