首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

从面向过程到面向对象——在C中怎么实现面向对象编程

2012-12-19 
从面向过程到面向对象——在C中如何实现面向对象编程从面向过程到面向对象——在C中如何实现面向对象编程2010-

从面向过程到面向对象——在C中如何实现面向对象编程

从面向过程到面向对象——在C中如何实现面向对象编程2010-05-26 星期三 晴朗

2.实现OOP中的继承(不包括类权限继承)

OOP中的继承,其实就是将各个类中通用的数据和方法放在基类中,当子类继承自该父类时,就自动拥有该父类定义数据和方法。
因此我们可以将子类中存放一个指向父类(通用类)的指针,然后在构建子类的时候先构建父类并将父类的地址存放在子类的这个指针中,这样子类就可以通过这个指针访问父类的数据和方法了。另一种方式是直接嵌入父类结构,这个更常见。具体例子如下所示:

父类:


《UTLK, 3th》Figure 14-3. Linking the block device descriptors with the other structures of the block subsystem

说明:这种通过组合的方式实现继承其实在OOP中也很常见,整个设计模式的核心其实就在于组合。

3.实现OOP中的多态性

OOP中的多态的表现就是通过一个通用类指针(或引用)在运行时根据实际类型自动调用子类的方法。因此,如果我们能够动态确定要调用哪个函数,并将其地址设置在一个通用类中一个固定的指针字段上,那么我们就可以达到通过这个固定指针字段调用不同函数的效果。实际上这也是C++中多态性的实现方法(通过一个指针指向一个虚函数表,并在创建时候根据子类类型动态填充该虚函数表)。一个很好的比喻就是《阿甘正传》的最经典的一句话:"Life is a box of chocolate, you never know what you're gonna to get!"。Chocolate就是那个固定的函数指针字段,而根据取出来的具体的巧克力将有不同的味道(方法,行为)。

注意:C中实现多态有个缺点,就是通过指向基类的指针调用子类的函数并不能处理子类的数据。而必须在基类中设置一个指针指向子类(一般为void *指针)。这在前面第二点"实现OOP中的继承"中就有谈到了。这里再举个例子;

?

热点排行