用C语言实现C++ 继承多态

用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;
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容