首页 构造函数、析构函数是否要声明为虚函数的问题

构造函数、析构函数是否要声明为虚函数的问题

举报
开通vip

构造函数、析构函数是否要声明为虚函数的问题构造函数、析构函数是否要声明为虚函数的问题 考研屋 www.kaoyanwu.com 提供各大机构考研、公务员、四六级辅导视频课程 : 构造函数不能声明为虚函数的原因是: 解释一:所谓虚函数就是多态情况下只执行一个,而从继承的概念来讲,总是要先构造父类对象,然后才能是子类对象,如果构造函数设为虚函数,那么当你在构造父类的构造函数时就不得不显示的调用构造,还有一个原因就是为了防错,试想如果你在子类中一不小心重写了个跟父类构造函数一样的函数,那么你的父类的构造函数将被覆盖,也即不能完成父类的构造.就会出错. ...

构造函数、析构函数是否要声明为虚函数的问题
构造函数、析构函数是否要声明为虚函数的问题 考研屋 www.kaoyanwu.com 提供各大机构考研、公务员、四六级辅导视频课程 : 构造函数不能声明为虚函数的原因是: 解释一:所谓虚函数就是多态情况下只执行一个,而从继承的概念来讲,总是要先构造父类对象,然后才能是子类对象,如果构造函数设为虚函数,那么当你在构造父类的构造函数时就不得不显示的调用构造,还有一个原因就是为了防错,试想如果你在子类中一不小心重写了个跟父类构造函数一样的函数,那么你的父类的构造函数将被覆盖,也即不能完成父类的构造.就会出错. 解释二:虚函数的主要意义在于被派生类继承从而产生多态. 派生类的构造函数中, 编译器会加入构造基类的代码, 如果基类的构造函数用到参数, 则派生类在其构造函数的初始化列表中必须为基类给出参数, 就是这个原因. 析构函数设为虚函数的作用: 解释:在类的继承中,如果有基类指针指向派生类,那么用基类指针delete时,如果不定义成虚函数,派生类中派生的那部分无法析构。 例: #include “stdafx.h” #include “stdio.h” class A { public: A(); virtual ~A(); }; A::A() { } A::~A() { printf(“Delete class AP\n”); } class B : public A { public: B(); ~B(); }; B::B() { } B::~B() { 专业提供提供各大机构考研、公务员、四六级辅导视频课 考研屋 www.kaoyanwu.com 提供各大机构考研、公务员、四六级辅导视频课程 printf(“Delete class BP\n”); } int main(int argc, char* argv[]) { A *b=new B; delete b; return 0; } 输出结果为:Delete class B Delete class A 如果把A 的virtual 去掉: 那就变成了Delete class A 因此析构函数不声明为虚函数容易造成内存泄漏。 考研屋www.kaoyanwu.com :提供各大机构考研、公务员、四六级辅导视频课程 专业提供提供各大机构考研、公务员、四六级辅导视频课
本文档为【构造函数、析构函数是否要声明为虚函数的问题】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_686908
暂无简介~
格式:doc
大小:13KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-12-11
浏览量:6