先看以下代码实现c语言的继承、多态的方法:
#include <stdio.h>
/**
* c语言模拟多态的实现
*/
/**
* 基类 抽象类
*/
struct file_operation
{
void (*read)(void);
void (*write)(void);
};
struct file_system
{
char name[20];
struct file_operation fops; /**< 结构体中套用结构体是c语言实现继承的方式,继承抽象类*/
};
void ext_read()
{
printf("ext read\n");
}
void ext_write()
{
printf("ext write\n");
}
void fat_read()
{
printf("fat read\n");
}
void fat_write()
{
printf("fat write\n");
}
int main()
{
struct file_system ext={"ext",{ext_read,ext_write}}; /**< 结构体变量看做file_system的子类,这与c++中的多态实现不太一样*/
struct file_system fat={"fat",{fat_read,fat_write}}; /**< ext和fat继承自同一个父类*/
struct file_system *fop; /**< 定义基类指针*/
/*通过基类指针指向不同的子类,然后调用子类中的方法,就实现了多态 */
fop = &ext; /**< 基类指针指向子类对象*/
fop->fops.read(); /**< 基类指针调用子类函数*/
fop = &fat;
fop->fops.read();
return 0;
}
在上面的示例代码中,我们首先定义了一个file_system结构类型,并把它作为基类,使用该结构体类型定义的ext和fat变量可以看
作file_system的子类。然后,我们定义了一个指向基类的指针fp,并通过基类指针fp去访问各个子类中同名函数的不同实现,C语言通过这种方法“模拟”了多态。