分享
 
 
 

龙生九子----多态

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

龙生九子

----多态

作者:HolyFire

一龙生九子,子子皆不同。这个道理说的是世界上没有两个或两个以上的事物是完全相同的,事物之间有相同相似的一面,当然也有不同相异的一面。只有将不同的和相同的都考虑进来,才能完整的表达事物。

事物的属性有着不同的一面。我们知道人感知事物的一个途径是观察,用对不同光线的反应来识别物体,所以我们给出事物的一个属性,颜色。有时候一些物体的颜色是固定的,白色的云,蔚蓝的天空,碧绿的草地,不禁令人神游太虚。

但有些方面是不确定的,有一句话说道:“月有阴晴圆缺,人有悲欢离合”,这句话还不足以说明这个道理。我们中文里有时候会省略一些部分,“今天你吃了没有?”吃的是什么,“早饭”,“下午茶”,“面包”,不知道。这里将吃东西抽象化了,这句话可以在早上说,中午说,晚上说,任何一个适合的时间段都可以说。感兴趣的地方出现了,我们不知道吃什么东西,什么时候吃,但是却可以使用它,简要的表达一下你的问候。这样简单的设下伏笔,在具体需要的环境才用具体表现出来具体的用法,被广泛运用在生活中。“我砍!”表达了一个人要做的动作,具体砍什么,只有感兴趣的人才会去关注。“我生病了。”表达了一个人的状态,具体生的什么病,不是人人都想知道的。

多态--就是指事物不同的方面

多态是一种复杂的应用,要全面的阐述它很难,所以理解它的思想就成了重点。在不同情况下,秉承它的思想,用不同的方法实现多态。

还记得C++中的虚函数吗,我在《后入为主----虚函数》中讲过,虚函数可以动态改变,运用这个特性就能实现我们的目的了。不同的语言使用不同的方法,实现的机制就是一个类型提供的接口可以改变。这样就能体现不同这个思想了。

为了更好理解,我们用C++实现一个例子。

我们知道,要生活,就要工作,工作是人的社会行为,几乎人人都在工作。世界上有形形色色的人,人的工作的区分在什么地方呢,那就是它的职业,不同职业的人做不同的事。

学生的工作就是学习,司机的工作是开车,小贩的工作是卖商品,程序员的工作是编写代码。

现在我们分析一下,世界上有很多人,人都要工作

人 { 工作 = 未确定 }

学生的工作是学习

学生 { 人 , 工作 = 学习 }

司机的工作是开车

司机 { 人 , 工作 = 开车 }

小贩的工作是贩卖

小贩 { 人 , 工作 = 贩卖 }

程序员的工作是编程

程序员 { 人 , 工作 = 编程 }

#include <iostream>

unsing namespace std;

class Man{

public:

virtual void Work( void ) = 0;//纯虚函数,没有确定的职业就不知道他的工作。

};

class Student : public Man{

public:

void Work( void ) { cout << "I'm Learning."<< endl; };

};

class Chauffeur : public Man{

public:

void Work( void ) { cout << "I'm Driving."<< endl; };

};

class Vendor : public Man{

public:

void Work( void ) { cout << "I'm Vending."<< endl; };

};

class Programer : public Man{

public:

void Work( void ) { cout << "I'm Coding."<< endl; };

};

void main()

{

Man * which[5];

which[0] = new Student;

which[1] = new Chauffeur;

which[2] = new Vendor;

which[3] = new Programer;

which[4] = NULL;

for( int i = 0 ; which[i] ; i++ )

{

which[i]->Work();

delete which[i];

}

}

运行结果

I'm Learning. //虚函数表指针指向的Student的虚函数表

I'm Driving. //虚函数表指针指向的Chauffeur的虚函数表

I'm Vending. //虚函数表指针指向的Vendor的虚函数表

I'm Coding. //虚函数表指针指向的Programer的虚函数表

我们看到了由于使用了虚函数,类增加了虚函数表和虚函数表指针

which[0] = new Student;

我们分析这个指针,他指向一个Student对象,而这个指针描述的是一个Man对象,在Student对象被创建的时候虚函数表指针指向了Student的虚函数表,所以which[0]->Work();调用的是在Student的虚函数表里查出来的Student::Work();其它的以此类推,不难得到运行的结果。

不同职业的类用同一个接口实现了不同功能,我们的目的达到了,代码很简洁,意图很明显,这里C++又一次很好的实现了面向对象的思想。

2001/8/17

丁宁

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有