派生类中重新定义虚函数及虚函数的注意事项
2016-03-28 22:10
435 查看
在派生类中重新定义虚函数时,不需加关键字virtual但是必须要和父类中的同名,同返回类型,同参数列表
例外
父类可以返回父类指针
派生类可以返回派生类指针
1.只有类的成员函数才能做虚函数
2.静态成员函数是所有同类对象所共有的,不能作为虚函数
3.全局函数不能做虚函数
4.内联函数不能做虚函数
5.构造函数不能定义为虚函数(因为在调用构造函数的时候对象还没有完全初始化)
6.析构函数可以定义为虚函数(在父类及其派生类中都动态分配内存空间时,必须把父类的析构函数定义为虚函数,实现撤销对象时的多态性)
执行结果:
未将父类的析构函数设成虚函数时:
create base!
create D!
free base!
将父类的析构函数设成虚函数时:
create base!
create D!
free D!
free base!
例外
父类可以返回父类指针
派生类可以返回派生类指针
class base { public: base* show() { cout<<"this is base show()!"<<endl; return this; } }; class D : public base { public: D* show() { cout<<"this is D show()!"<<endl; return this; } }; void main() { D d; base *p = &d; p->show(); //调用base中的show方法 }
1.只有类的成员函数才能做虚函数
2.静态成员函数是所有同类对象所共有的,不能作为虚函数
3.全局函数不能做虚函数
4.内联函数不能做虚函数
5.构造函数不能定义为虚函数(因为在调用构造函数的时候对象还没有完全初始化)
6.析构函数可以定义为虚函数(在父类及其派生类中都动态分配内存空间时,必须把父类的析构函数定义为虚函数,实现撤销对象时的多态性)
class base { public: base() //父类构造函数 { cout<<"create base!"<<endl; } ~base() //父类析构函数 { cout<<"free base!"<<endl; } }; class D : public base { public: D() { cout<<"create D!"<<endl; } ~D() { cout<<"free D!"<<endl; } }; void main() { base *p = new D; //分配动态内存 delete p; //释放内存 }
执行结果:
未将父类的析构函数设成虚函数时:
create base!
create D!
free base!
将父类的析构函数设成虚函数时:
create base!
create D!
free D!
free base!
相关文章推荐
- maven中snapshot快照库和release发布库的区别和作用
- maven中snapshot快照库和release发布库的区别和作用
- maven中snapshot快照库和release发布库的区别和作用
- maven中snapshot快照库和release发布库的区别和作用
- AngularJS 事件
- Bootstrap multiselect多选联动的实现
- uva 12538
- 欧拉角
- iOS开发-单元测试
- 忘记mysql 5.7的密码
- java字节码指令简介(仅了解)
- 博客搬家啦!
- 树莓派 vnc设置
- 我的第二次上机作业项目四
- 结对作业4词频统计2
- PADS层定义及过孔设置,厚度调节
- CCF 模拟C 找最大矩形+输入输出外挂
- zeromq
- ABP源码分析十五:ABP中的实用扩展方法
- 浏览器的进制常识