关于C++虚函数,纯虚函数以及模板等重要概念的深入讨论(一)
来源:互联网 发布:云计算paas平台 编辑:程序博客网 时间:2024/06/05 19:55
1.虚函数
虚函数主要利用在多态的实现上,当基类的成员函数为虚函数时,它的子类函数如果也实现了这个虚函数,那么就可以实现多态的功能。
上述代码输出为:
从而我们可以清楚的看出objectC虽然属于A类的,但是由于多态的原理,A类中的print函数被B类给重载了,从而objectC输出的即是B类的print;还有一点值得注意要的是虚函数可以传参,但最好不要带有默认参数,否则会造成误解,倘若我们将print函数传入默认参数,main函数不变的话,代码如下(这里只写了A,B也应同理的改写print函数并将默认参数设为3):
那么输出的结果为:
会惊讶的发现不是说好的:objectC输出的是B类的print的么?从而objectC不是应该输出为3么?为什么会这样呢?答案是函数依然调用的是B的print然而传参是A的print函数的参数;这就是为什么不建议为虚函数设置默认参数的原因所在。
2.析构与虚析构函数
普通的析构函数如上例:~A(); 然后在实现它的地方执行内存释放等操作。而虚析构函数为:virtual ~A(); 即在析构函数前加入关键字virtual即可。通常在编写程序的过程中要求基类的析构函数必须为虚析构函数(抱歉上述代码本人没有按要求使用用虚析构函数,正常必须使用虚析构)。原因其实从上面的小节中就可知道,当实现多态时,即利用类似指针 objectC这种方式的时候,当objectC对象处理完了,需要调用析构的时候,这时候实际上在调用A的析构函数时,我们同样也要调用B的析构函数,普通的析构函数没法实现,而虚析构函数却可以顺利的实现,具体原理如果你彻底明白第一节的内容就会明白虚析构函数的原因,因此切记在编写程序的时候基类的析构函数必须为虚析构函数!!
<未完待续>
- 关于C++虚函数,纯虚函数以及模板等重要概念的深入讨论(一)
- 关于C++虚函数,纯虚函数以及模板等重要概念的深入讨论(二)
- 关于C++虚函数,纯虚函数以及模板等重要概念的深入讨论(三)
- 【C/C++学院】0823-静态联合编译与动态联合编译/父类指针子类指针释放/虚函数/纯虚函数概念以及虚析构函数/抽象类与纯虚函数以及应用/虚函数原理/虚函数分层以及异质链表/类模板的概念以及应用
- 纯虚函数概念
- C++::关于虚函数,纯虚函数
- c++(一) 类 对象 重载 继承 多态 构造函数 虚函数 覆盖 纯虚函数等
- (1.1.10)虚函数、纯虚函数和虚继承的区别以及“覆盖”的概念
- 【C/C++】理解虚基类、虚函数与纯虚函数的概念
- 理解虚基类、虚函数与纯虚函数的概念
- 理解虚基类、虚函数与纯虚函数的概念
- 理解虚基类、虚函数与纯虚函数的概念
- 理解虚基类、虚函数与纯虚函数的概念
- 理解虚基类、虚函数与纯虚函数的概念
- 理解虚基类、虚函数与纯虚函数的概念
- 理解虚基类、虚函数与纯虚函数的概念
- 理解虚基类、虚函数与纯虚函数的概念
- 理解虚基类、虚函数与纯虚函数的概念
- 桥接模式
- 360度实拍介绍唐山市鼎旺社区(唐山鼎旺、鼎旺国际、鼎旺瑞景、鼎旺大观、鼎旺90社区)
- Shiro框架
- 安卓 简易音乐播放器
- 定时器
- 关于C++虚函数,纯虚函数以及模板等重要概念的深入讨论(一)
- jquery json
- Ubuntu让新增用户获取su
- java EE WEB 零基础到架构师教学培训资料视频
- 重新安装eclipse需要做的几件事
- 《Android群英传》---读书笔记4
- 编译原理初探(续)
- Android view(二)
- POJ 1061 青蛙的约会