您的位置:首页 > 其它

如何将多态与现实应用结合起来

2013-04-26 14:54 141 查看
最近在看C++基础,多态是C++面相对象的一个特征。书上讲的很详细,但我向来对文字不敏感,必须要在脑海里构建抽象模型才能深刻理解。否则就是纸上谈兵了。

思考了一会儿,想出一个案例:我要出门了,肯定要选择一个交通工具,交通工具有汽车、自行车,我可以选择其一。

于是,我把这个案例虚拟化。交通工具的出行虚拟成类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的,就开始犯糊涂了。

这只是我个人辅助学习的思路,不可能对大家都有用。能帮到大家最好不过了,如果没帮到,请大家忘记我的思路,不要被我给搞糊涂了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: