天天看点

C语言实现面向对象的多态之----条件判断

什么是多态

什么是多态,我理解的就是相同的函数名,在不同的上下文中有不同的实现,程序能够根据自己所处的上下文选择合适的实现。其实这里的上下文最多的还是指子类和父类环境。举个简单的例子,就好比你和你的父亲,同样是接待你小姨妈这么一个行为,接待方式肯定是不一样的。

对于C来说,多态其实就是一种条件判断,if 或者switch

还是用书中列举的传感器为例,访问传感器采集数据的接口的不同,可以将传感器分为两大类:一种是端口映射的传感器,一种是内存映射的传感器

通过在类中添加一个属性whatKindOfInterface,在采集数据函数acquireValue中用switch列举出不同类型的传感器所对应的采集方式

int acquireValue(Sensor *me) {      
int *r, *w; /* read and write addresses */      
int j;      
switch(me->whatKindOfInterface) {      
case MEMORYMAPPED:      
w = (int*)WRITEADDR; /* address to write to sensor */      
*w = WRITEMASK; /* sensor command to force a read */      
for (j=0;j<100;j++) { /* wait loop */ };      
r = (int *)READADDR; /* address of returned value */      
me->value = *r;      
break;      
case PORTMAPPED:      
me->value = inp(SENSORPORT);      
/* inp() is a compiler-specific port function */      
break;      
}; /* end switch */      
return me->value;      
};      

Code Listing 4: Polymorphism the hard way

这种方式缺点:这种方法要求我们在类对象初始化之前就要预知所有的可能的上下文环境,或者我们也应该能够很方便的通过修改函数来添加一个新的上下文环境。但是,实际的多态并不是这样的,它不需要去预知所有的可能,当一个新的上下文被发现的时候,多态函数就能够自行的被创建添加,不需要去修改其他函数。

这个是用C的传统方式实现的多态(条件判断),在下一章说完继承之后我们会用一种全新的方式来实现多态。

继续阅读