typedef void(*FUN)();//重定义一个函数指针类型
struct Base
{
FUN f;//由于C语言中结构体不能包含函数 只能用函数指针在外面实现
};
struct Derive//本派生类只继承了父类 他自己没有自己的部分
{
Base b;//在子类中定义一个基类的对象即可实现对父类的继承
};
void FunB()
{
printf("%s\n","Base::FunB()");
}
void FunD()
{
printf("%s\n","Derive::FunD()");
}
void show()
{
Base b;//定义一个父类的对象
Derive d;//定义一个派生类的对象
b.f = FunB;//父类的对象调用父类的同名函数
d.b.f = FunD;//子类的对象调用子类的同名函数
Base *pb = &b;//父类的指针指向父类的对象
pb->f();//父类指针调用父类的同名函数
pb = (Base*)&d;//父类指针指向子类对象 由于类型不匹配所以要强转
pb->f();//调用子类的同名函数
}
int main()
{
show();//Base::FunB() Derive::FunD()
return 0;
}