C语言实现面向对象的多态之----条件判断
2012-02-09 09:06
417 查看
什么是多态
什么是多态,我理解的就是相同的函数名,在不同的上下文中有不同的实现,程序能够根据自己所处的上下文选择合适的实现。其实这里的上下文最多的还是指子类和父类环境。举个简单的例子,就好比你和你的父亲,同样是接待你小姨妈这么一个行为,接待方式肯定是不一样的。
对于C来说,多态其实就是一种条件判断,if 或者switch
还是用书中列举的传感器为例,访问传感器采集数据的接口的不同,可以将传感器分为两大类:一种是端口映射的传感器,一种是内存映射的传感器
通过在类中添加一个属性whatKindOfInterface,在采集数据函数acquireValue中用switch列举出不同类型的传感器所对应的采集方式
Code Listing 4: Polymorphism the hard way
这种方式缺点:这种方法要求我们在类对象初始化之前就要预知所有的可能的上下文环境,或者我们也应该能够很方便的通过修改函数来添加一个新的上下文环境。但是,实际的多态并不是这样的,它不需要去预知所有的可能,当一个新的上下文被发现的时候,多态函数就能够自行的被创建添加,不需要去修改其他函数。
这个是用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的传统方式实现的多态(条件判断),在下一章说完继承之后我们会用一种全新的方式来实现多态。
相关文章推荐
- C语言面向对象的思想(实现继承和多态)
- c语言实现面向对象之继承,多态
- C语言实现面向对象的思想(实现封装、继承和多态)
- C语言也可以“面向对象”—— C语言实现封装、继承和多态
- C语言中的面向对象-C语言的多态实现
- C语言中的面向对象(2)-C语言的多态实现
- 用c语言实现面向对象的封装继承和多态
- 【转】C语言实现C++面向对象的封装、继承、多态机制
- 软件设计本质论(Essential Design) —白话面向对象 (转注:关于c语言实现封装继承多态的一堆博文)
- 俺使用的C语言面向对象范式(第四节:多态的实现 与 总结)
- C语言中的面向对象(2)-C语言的多态实现(转载)
- 6-7 统计某类完全平方数(20 分) 本题要求实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144、676等。
- C语言:实现一个函数判断year是不是闰年
- c语言实现判断汉字
- [置顶] 实现1+2+3...+n,不能使用*、/、循环、条件判断、选择相关的关键字
- C语言模拟实现C++的继承多态
- c语言模拟实现c++的继承和多态
- C语言实现星座判断
- 判断素数问题(C语言实现)
- c语言中继承和多态的简单实现