用C语言实现C++ 继承多态
#include <stdio.h>
#include <stdlib.h>
// 基类结构体
typedef struct Base
{
void (*speak)(struct Base *); // 虚函数
} Base;
// 派生类结构体
typedef struct Derived
{
Base base; // 基类子对象
int data;
} Derived;
// 基类虚函数的实现
void base_speak(Base *base)
{
printf("Base::speak\n");
}
// 派生类重写虚函数的实现
void derived_speak(Base *base)
{
printf("Derived::speak\n");
Derived* derived = (Derived*)base;
printf("Derived::speak data=%d \n", derived->data);
}
// 初始化基类对象
void init_base(Base *base)
{
base->speak = base_speak; // 设置虚函数指针
}
// 初始化派生类对象
void init_derived(Derived *derived)
{
init_base((Base *)derived); // 调用基类初始化函数
derived->base.speak = derived_speak; // 重写虚函数指针
derived->data = 42; // 设置派生类数据成员
}
int main()
{
Base *basePtr; // 基类指针
Derived derived; // 派生类对象
init_derived(&derived); // 初始化派生类对象
basePtr = (Base *)&derived; // 将基类指针指向派生类对象
basePtr->speak(basePtr); // 调用虚函数,输出 "Derived::speak"
return 0;
}