抽象方法 - C++快速入门24
2012-05-12 02:54
513 查看
抽象方法
让编程改变世界Change the world by program
课前测试
1. 该程序如何修改可以达到预期目的。2. 进阶自学:C++多态的实现原理
很多朋友觉得 C++ 难学,就像刚刚的文章,尼玛就坑爹,那么多概念,那么多文字,看完都不容易,要理解容易吗??!!
其实,小甲鱼觉得,既然是学以致用,我们就只需要掌握目前我们需要的。而那些看上去很深奥的概念,我们先放着就行了。。。。。。
抽象方法
抽象方法(abstract method,也可以成为纯虚函数)是面向对象编程技术的另一个核心概念,在设计一个多层次的类继承关系时常会用到。把某个方法声明为一个抽象方法等于告诉编译器这个方法必不可少,但我现在(在这个基类里)还不能为它提供一个实现!
其实在之前我们已经见过一个应该被声明为抽象方法的好例子了,没错,就是 Pet::play() 方法。
为什么?
上一个例子中,现实中既不存在什么都玩的宠物,也不存在什么都能玩的游戏。
每种宠物都有它自己的玩法,而我们的应对措施是输出一条消息说宠物正在玩。
现在既然知道了抽象方法这个概念,我们就再也用不着编写那些不必要的代码了。
抽象方法的语法很简单:在声明一个虚方法的基础上,在原型的末尾加上”=0”。(告诉编译器不用浪费时间在这个类里寻找这个方法的实现!)
多态性
多态性是面向对象程序设计的重要特征之一。简单的说,多态性是指用一个名字定义不同的函数,调用同一个名字的函数,却执行不同的操作,从而实现传说中的”一个接口,多种方法”!
多态是如何实现绑定的?
编译时的多态性:通过重载实现运行时的多态性:通过虚函数实现
编译时的多态性特点是运行速度快,运行时的多态性特点是高度灵活和抽象。
析构函数解析
不久前,小甲鱼告诉大家析构器都是虚方法,大部分鱼油表示不解啊,有木有?!从一个实例说起:ClsBase.cpp(程序源代码及课件下载)
栗子很简单,如果我们把类 ClxBase 析构函数前的 virtual 去掉,那输出结果就应该是:
Do something in class ClsDerived!
也就是说类 ClxDerived 的析构函数压根儿没有杯调用到!
一般下类的析构函数里面都是释放内存资源,而析构函数不被调用的话旧会造成内存泄露。
所以,析构器都是虚方法是为了当一个基类的指针删除一个派生类的对象时,派生类的析构函数可以被正确调用。
另外,当类里面有虚函数的时候,编译器会给类添加一个虚函数表,里边存放着虚函数指针。
为了节省资源,只有当一个类被用来作为基类的时候,我们才把析构函数写成虚函数!
[buy] 获得所有教学视频、课件、源代码等资源打包 [/buy]
[Downlink href='http://urlxf.qq.com/?emY3eqe']视频下载[/Downlink]
[Downlink href='http://kuai.xunlei.com/d/LAOZBBZINIHY']备胎下载[/Downlink]
相关文章推荐
- 抽象方法 - C++快速入门24
- 静态属性和静态方法 - C++快速入门21
- 虚方法 - C++快速入门23
- 静态属性和静态方法 - C++快速入门21
- 虚方法 - C++快速入门23
- 覆盖方法和重载方法 - C++快速入门19
- 快速入门C++ 09(静态属性和静态方法)
- 静态属性和静态方法2 - C++快速入门22
- 覆盖方法和重载方法 - C++快速入门19
- 静态属性和静态方法2 - C++快速入门22
- 从函数或方法返回内存 - C++快速入门35
- 从函数或方法返回内存 - C++快速入门35
- 《C++ 101条建议》学习笔记——第一章快速入门
- (二)Eclipse环境下配置C/C++的IDE(运行环境)【更加快速的方法】
- C++快速入门--6
- 避免内存泄漏 - C++快速入门38
- 复杂的数据类型3 - C++快速入门09
- 联合、枚举和类型别名 - C++快速入门13
- 快速入门:自学Linux命令的四种方法
- 命名空间和模块化编程3 - C++快速入门41