如何将多态与现实应用结合起来
2013-04-26 14:54
141 查看
最近在看C++基础,多态是C++面相对象的一个特征。书上讲的很详细,但我向来对文字不敏感,必须要在脑海里构建抽象模型才能深刻理解。否则就是纸上谈兵了。
思考了一会儿,想出一个案例:我要出门了,肯定要选择一个交通工具,交通工具有汽车、自行车,我可以选择其一。
于是,我把这个案例虚拟化。交通工具的出行虚拟成类Transport,汽车的出行虚拟成类Car,自行车的出行虚拟成类Bike。
先创建类Transport:
再分别创建类Car和类Bike:
好了,现在我要出门了。我就定义一个变量,模拟我要用交通工具出行了:Transport *t = new Transport;t->use();
这个时候我想用汽车出行了,只需要使t = new Car;t->use();
我这个人很奇怪,汽车不坐却想骑自行车了,那么只需要t = new Bike;t->use();
想这么做,只需要将基类Transport的函数定义成虚函数即可,派生类Car和Bike的函数就不需要定义成virtual了,当然定义成virtual也不会出错,不过对于这种情形也是多此一举,容易混淆。一开始我学虚函数的时候,有些代码确实是基类和派生类都定义成了virtual,我就误以为想实现多态,必须要将基类派生类的函数都定义成虚函数。后来又看到有些代码是没有写virtual的,就开始犯糊涂了。
这只是我个人辅助学习的思路,不可能对大家都有用。能帮到大家最好不过了,如果没帮到,请大家忘记我的思路,不要被我给搞糊涂了。
思考了一会儿,想出一个案例:我要出门了,肯定要选择一个交通工具,交通工具有汽车、自行车,我可以选择其一。
于是,我把这个案例虚拟化。交通工具的出行虚拟成类Transport,汽车的出行虚拟成类Car,自行车的出行虚拟成类Bike。
先创建类Transport:
class Transport { public: Transport(){ cout<<"Transport constructor."<<endl; } ~Transport(){ cout<<"~Transport destructor."<<endl; } virtual void use(){ cout<<"This is Transport Base."<<endl; } };
再分别创建类Car和类Bike:
class Car:public Transport { public: Car(){ cout<<"Car constructor."<<endl; } ~Car(){ cout<<"~Car destructor."<<endl; } void use(){ cout<<"This is Car."<<endl; } }; class Bike:public Transport { public: Bike(){ cout<<"Bike constructor."<<endl; } ~Bike(){ cout<<"~Bike destructor."<<endl; } void use(){ cout<<"This is Bike."<<endl; } };
好了,现在我要出门了。我就定义一个变量,模拟我要用交通工具出行了:Transport *t = new Transport;t->use();
这个时候我想用汽车出行了,只需要使t = new Car;t->use();
我这个人很奇怪,汽车不坐却想骑自行车了,那么只需要t = new Bike;t->use();
想这么做,只需要将基类Transport的函数定义成虚函数即可,派生类Car和Bike的函数就不需要定义成virtual了,当然定义成virtual也不会出错,不过对于这种情形也是多此一举,容易混淆。一开始我学虚函数的时候,有些代码确实是基类和派生类都定义成了virtual,我就误以为想实现多态,必须要将基类派生类的函数都定义成虚函数。后来又看到有些代码是没有写virtual的,就开始犯糊涂了。
这只是我个人辅助学习的思路,不可能对大家都有用。能帮到大家最好不过了,如果没帮到,请大家忘记我的思路,不要被我给搞糊涂了。
相关文章推荐
- 工作心得(二)——如何将Nexus本地仓库和Maven结合起来
- 如何实现webwork+spring+hibernate框架的结合应用
- 如何将蓝牙和802.11结合起来提供高速无线连接
- CSS和html如何结合起来——选择符及优先级
- 如何利用SEO技术和现代项目结合起来
- 把PHP应用和Flex结合起来!
- CorelDRAW X3符号如何应用在图片中这些方法可以做到完美结合
- 如何理解和应用Java的多态 推荐
- 如何配置基于eclipse的easy structs插件,并介绍了如何结合使用easy structs和eclipes来开发struts的应用
- 如何把unicode和点阵字库结合起来
- 如何把作好的CSS文档与HTML结合起来运用
- 如何将读书与自己的生活工作结合起来?
- 如何把BDD,ATDD和TDD结合起来?
- js apply 结合 多态的应用
- 《观音心经》领悟后的空寂感,如何与现实世界有机结合
- 如何判断一笔交易是否属于欺诈 数据挖掘算法与现实生活中的应用案例
- 如何将蓝牙和802.11结合起来提供高速无线连接
- 如何开发AR增强现实应用与产品
- 如何开发AR增强现实应用与产品
- 如何结合场景应用做推广