C++可以实现多态,并且很大程度上降低了代码的复杂性,但是对于C语言,也是可以实现多态的。
C++通过类可以实例一个对象,C语言用结构体来实例一个对象,用函数指针实现多态。多态,就是一个接口能够有多种不同的实现方式。在我的理解里,在结构体里申明一个函数指针就是开了一个接口,在不同的对象里可以通过这个函数指针调用不同的函数,从而实现了多态。而继承就更好实现了,先定义一个结构体当作基类,在子类中定义一个基类的对象即可实现对父类的继承。
写个代码示例:
typedef void (*fun)();
struct base //定义基类
{
fun func;
int B1;
};
struct sub //定义子类
{
base b1;//实现C++中的继承
int S1;
};
void fun_a()
{
printf("hello fun_a\n");
}
void fun_b()
{
printf("hello fun_b\n");
}
int main()
{
base A;//定义一个基类对象A
sub B;//定义一个子类对象B
A.func = fun_a;//基类对象调用基类的同名函数
B.func = fun_b;//子类对象调用子类的同名函数
base *pA = &A;//定义一个基类的指针指向基类的对象
pA->func();//调用基类的同名函数
pA = (base *)&B;//基类指针指向子类的对象,因类型不同所以强转
pA->func();//调用子类的同名函数
return 0;
}