C语言面向对象的简单例子

嵌入式大杂烩 2023-04-25 21:44

C语言是一种面向过程的语言,但是也可以用结构体和函数指针来模拟面向对象的特性,比如封装、继承和多态。下面我们来看一些具体的例子和应用。

封装是指把对象的属性和方法封装在一起,提供一个接口给外部调用,隐藏内部细节。在C语言中,我们可以用结构体来定义对象的属性,用函数指针来定义对象的方法,然后把它们放在一个结构体中,形成一个类。例如,我们可以定义一个人类:

#include 
#include 

// 定义人类
struct person {
    // 属性
    char *name;
    int age;
    // 方法
    void (*say_hello)(struct person *p);
};

// 定义人类的方法
void say_hello(struct person *p) {
    printf("Hello, I am %s, %d years old.\n", p->name, p->age);
}

// 创建人类的实例
struct person *create_person(char *name, int age) {
    struct person *p = malloc(sizeof(struct person));
    p->name = name;
    p->age = age;
    p->say_hello = say_hello;
    return p;
}

// 使用人类的实例
int main() {
    struct person *p1 = create_person("Alice"20);
    struct person *p2 = create_person("Bob"25);
    p1->say_hello(p1);
    p2->say_hello(p2);
    free(p1);
    free(p2);
    return 0;
}

继承是指子类可以复用父类的属性和方法,同时可以添加或覆盖父类的属性和方法。在C语言中,我们可以用结构体嵌套来实现继承,即把父类作为子类的第一个成员。例如,我们可以定义一个学生类,继承自人类:

#include 
#include 

// 定义人类
struct person {
    // 属性
    char *name;
    int age;
    // 方法
    void (*say_hello)(struct person *p);
};

// 定义人类的方法
void say_hello(struct person *p) {
    printf("Hello, I am %s, %d years old.\n", p->name, p->age);
}

// 创建人类的实例
struct person *create_person(char *name, int age) {
    struct person *p = malloc(sizeof(struct person));
    p->name = name;
    p->age = age;
    p->say_hello = say_hello;
    return p;
}


// 定义学生类
struct student {
    // 继承自人类
    struct person base;
    // 属性
    char *school;
    // 方法
    void (*study)(struct student *s);
};

// 定义学生类的方法
void study(struct student *s) {
    printf("%s is studying at %s.\n", s->base.name, s->school);
}

// 创建学生类的实例
struct student *create_student(char *name, int age, char *school) {
    struct student *s = malloc(sizeof(struct student));
    s->base.name = name;
    s->base.age = age;
    s->base.say_hello = say_hello; // 复用父类的方法
    s->school = school;
    s->study = study;
    return s;
}

// 使用学生类的实例
int main() {
    struct student *s1 = create_student("Charlie"18"MIT");
    struct student *s2 = create_student("David"19"Stanford");
    s1->base.say_hello(&s1->base); // 调用父类的方法
    s2->base.say_hello(&s2->base);
    s1->study(s1); // 调用子类的方法
    s2->study(s2);
    free(s1);
    free(s2);
    return 0;
}

多态是指不同类型的对象可以使用相同的接口,根据对象的具体类型执行不同的行为。在C语言中,我们可以用函数指针来实现多态,即把不同类型的对象都转换为一个通用类型,然后调用它们共有的函数指针。例如,我们可以定义一个动物类和两个子类:狗类和猫类,分别实现动物类的叫声方法:

#include 
#include 

// 定义动物类
struct animal {
    // 属性
    char *name;
    // 方法
    void (*make_sound)(struct animal *a);
};

// 定义狗类
struct dog {
    // 继承自动物类
    struct animal base;
    // 属性
    char *breed;
};

// 定义猫类
struct cat {
    // 继承自动物类
    struct animal base;
    // 属性
    char *color;
};

// 定义动物类的方法
void make_sound(struct animal *a) {
    printf("%s is making sound.\n", a->name);
}

// 定义狗类的方法
void dog_make_sound(struct dog *d) {
    printf("%s is barking.\n", d->base.name);
}

// 定义猫类的方法
void cat_make_sound(struct cat *c) {
    printf("%s is meowing.\n", c->base.name);
}

// 创建动物类的实例
struct animal *create_animal(char *name) {
    struct animal *a = malloc(sizeof(struct animal));
    a->name = name;
    a->make_sound = make_sound;
    return a;
}

// 创建狗类的实例
struct dog *create_dog(char *name, char *breed) {
    struct dog *d = malloc(sizeof(struct dog));
    d->base.name = name;
    d->base.make_sound = (void (*)(struct animal *))dog_make_sound; // 覆盖父类的方法
    d->breed = breed;
    return d;
}

// 创建猫类的实例
struct cat *create_cat(char *name, char *color) {
    struct cat *c = malloc(sizeof(struct cat));
    c->base.name = name;
    c->base.make_sound = (void (*)(struct animal *))cat_make_sound; // 覆盖父类的方法
    c->color = color;
    return c;
}

// 使用动物类的实例
int main() {
    struct animal *a1 = create_animal("Tom");
    struct dog *d1 = create_dog("Spike""Bulldog");
    struct cat *c1 = create_cat("Jerry""Brown");
    
    // 多态:不同类型的对象使用相同的接口,执行不同的行为
    a1->make_sound(a1); // 调用动物类的方法
    d1->base.make_sound(&d1->base); // 调用狗类的方法
    c1->base.make_sound(&c1->base); // 调用猫类的方法
    
    free(a1);
    free(d1);
    free(c1);
    
    return 0;
}

以上就是C语言面向对象的一些例子。

本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。

注意

由于微信公众号近期改变了推送规则,为了防止找不到,可以星标置顶,这样每次推送的文章才会出现在您的订阅列表里。


猜你喜欢:

柔性数组在实际项目中的应用?

干货 | protobuf-c之嵌入式平台使用

C语言、嵌入式重点知识:回调函数

实用 | 10分钟教你搭建一个嵌入式web服务器


在公众号聊天界面回复1024,可获取嵌入式资源;回复 ,可查看文章汇总

嵌入式大杂烩 专注于嵌入式技术,包括但不限于C/C++、嵌入式、物联网、Linux等编程学习笔记,同时,内包含大量的学习资源。欢迎关注,一同交流学习,共同进步!
评论 (0)
  •   后勤实验仿真系统平台深度解析   北京华盛恒辉后勤实验仿真系统平台依托计算机仿真技术,是对后勤保障全流程进行模拟、分析与优化的综合性工具。通过搭建虚拟场景,模拟资源调配、物资运输等环节,为后勤决策提供数据支撑,广泛应用于军事、应急管理等领域。   应用案例   目前,已有多个后勤实验仿真系统平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润后勤实验仿真系统平台。这些成功案例为后勤实验仿真系统平台的推广和应用提供了有力支持。   一、核心功能   (一)后勤资源模拟
    华盛恒辉l58ll334744 2025-04-23 15:39 152浏览
  •   通用装备论证与评估系统平台解析   北京华盛恒辉通用装备论证与评估系统平台是服务军事装备全生命周期管理的综合性信息化平台,通过科学化、系统化手段,实现装备需求论证、效能分析等核心功能,提升装备建设效益。   应用案例   目前,已有多个通用装备论证与评估系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润通用装备论证与评估系统。这些成功案例为通用装备论证与评估系统的推广和应用提供了有力支持。   一、系统分层架构   (一)数据层   整合装备性能、作战、试验等多源异
    华盛恒辉l58ll334744 2025-04-24 16:14 14浏览
  •   有效样本分析决策系统平台全面解析   一、引言   北京华盛恒辉有效样本分析决策系统在当今数据驱动的时代,企业、科研机构等面临着海量数据的处理与分析挑战。有效样本分析决策系统平台应运而生,它通过对样本数据的精准分析,为决策提供有力支持,成为提升决策质量和效率的关键工具。   应用案例   目前,已有多个有效样本分析决策系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润有效样本分析决策系统。这些成功案例为有效样本分析决策系统的推广和应用提供了有力支持。   二、平台概述
    华盛恒辉l58ll334744 2025-04-24 11:13 69浏览
  •   海上训练与保障调度指挥平台系统解析   北京华盛恒辉海上训练与保障调度指挥平台系统是现代海上作战训练的核心枢纽,融合信息技术、GIS、大数据及 AI 等前沿技术,旨在实现海上训练高效组织、作战保障科学决策。以下从架构功能、应用场景、系统优势及发展挑战展开解读。   应用案例   目前,已有多个海上训练与保障调度指挥平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润海上训练与保障调度指挥平台。这些成功案例为海上训练与保障调度指挥平台的推广和应用提供了有力支持。   一
    华盛恒辉l58ll334744 2025-04-24 15:26 50浏览
  • 一、行业背景与市场需求高血压作为全球发病率最高的慢性病之一,其早期监测与管理已成为公共卫生领域的重要课题。世界卫生组织数据显示,全球超13亿人受高血压困扰,且患者群体呈现年轻化趋势。传统血压计因功能单一、数据孤立等缺陷,难以满足现代健康管理的需求。在此背景下,集语音播报、蓝牙传输、电量检测于一体的智能血压计应运而生,通过技术创新实现“测量-分析-管理”全流程智能化,成为慢性病管理的核心终端设备。二、技术架构与核心功能智能血压计以电子血压测量技术为基础,融合物联网、AI算法及语音交互技术,构建起多
    广州唯创电子 2025-04-23 09:06 158浏览
  • 前言本文主要演示基于TL3576-MiniEVM评估板HDMI OUT、DP 1.4和MIPI的多屏同显、异显方案,适用开发环境如下。Windows开发环境:Windows 7 64bit、Windows 10 64bitLinux开发环境:VMware16.2.5、Ubuntu22.04.5 64bitU-Boot:U-Boot-2017.09Kernel:Linux-6.1.115LinuxSDK:LinuxSDK-[版本号](基于rk3576_linux6.1_release_v
    Tronlong 2025-04-23 13:59 126浏览
  •   无人机结构仿真与部件拆解分析系统平台解析   北京华盛恒辉无人机结构仿真与部件拆解分析系统无人机技术快速发展的当下,结构仿真与部件拆解分析系统平台成为无人机研发测试的核心工具,在优化设计、提升性能、降低成本等方面发挥关键作用。以下从功能、架构、应用、优势及趋势展开解析。   应用案例   目前,已有多个无人机结构仿真与部件拆解分析系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润无人机结构仿真与部件拆解分析系统。这些成功案例为无人机结构仿真与部件拆解分析系统的推广和应用提
    华盛恒辉l58ll334744 2025-04-23 15:00 188浏览
  • 故障现象一辆2016款奔驰C200L车,搭载274 920发动机,累计行驶里程约为13万km。该车组合仪表上的防侧滑故障灯、转向助力故障灯、安全气囊故障灯等偶尔异常点亮,且此时将挡位置于R挡,中控显示屏提示“后视摄像头不可用”,无法显示倒车影像。 故障诊断用故障检测仪检测,发现多个控制单元中均存储有通信类故障代码(图1),其中故障代码“U015587 与仪表盘的通信存在故障。信息缺失”出现的频次较高。 图1 存储的故障代码1而组合仪表中存储有故障代码“U006488 与用户界
    虹科Pico汽车示波器 2025-04-23 11:22 91浏览
  •   电磁频谱数据综合管理平台系统解析   一、系统定义与目标   北京华盛恒辉电磁频谱数据综合管理平台融合无线传感器、软件定义电台等前沿技术,是实现无线电频谱资源全流程管理的复杂系统。其核心目标包括:优化频谱资源配置,满足多元通信需求;运用动态管理与频谱共享技术,提升资源利用效率;强化频谱安全监管,杜绝非法占用与干扰;为电子战提供频谱监测分析支持,辅助作战决策。   应用案例   目前,已有多个电磁频谱数据综合管理平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润电磁频谱数
    华盛恒辉l58ll334744 2025-04-23 16:27 181浏览
  •   高海拔区域勤务与装备保障调度系统平台解析   北京华盛恒辉高海拔区域勤务与装备保障调度系统平台专为高海拔特殊地理环境打造,致力于攻克装备适应、人员健康保障、物资运输及应急响应等难题。以下从核心功能、技术特点、应用场景及发展趋势展开全面解读。   应用案例   目前,已有多个高海拔区域勤务与装备保障调度系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润高海拔区域勤务与装备保障调度系统。这些成功案例为高海拔区域勤务与装备保障调度系统的推广和应用提供了有力支持。   一、核心
    华盛恒辉l58ll334744 2025-04-24 10:13 69浏览
  •   陆地装备体系论证与评估综合平台系统解析   北京华盛恒辉陆地装备体系论证与评估综合平台系统是契合现代军事需求而生的专业系统,借助科学化、智能化手段,实现对陆地装备体系的全方位论证与评估,为军事决策和装备发展提供关键支撑。以下从功能、技术、应用及展望展开分析。   应用案例   目前,已有多个陆地装备体系论证与评估综合平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润陆地装备体系论证与评估综合平台。这些成功案例为陆地装备体系论证与评估综合平台的推广和应用提供了有力支持。
    华盛恒辉l58ll334744 2025-04-24 10:53 66浏览
  •   陆地边防事件紧急处置系统平台解析   北京华盛恒辉陆地边防事件紧急处置系统平台是整合监测、预警、指挥等功能的智能化综合系统,致力于增强边防安全管控能力,快速响应各类突发事件。以下从系统架构、核心功能、技术支撑、应用场景及发展趋势展开全面解读。   应用案例   目前,已有多个陆地边防事件紧急处置系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润陆地边防事件紧急处置系统。这些成功案例为陆地边防事件紧急处置系统的推广和应用提供了有力支持。   一、系统架构   感知层:部
    华盛恒辉l58ll334744 2025-04-23 11:22 121浏览
  •   复杂电磁环境模拟系统平台解析   一、系统概述   北京华盛恒辉复杂电磁环境模拟系统平台是用于还原真实战场或特定场景电磁环境的综合性技术平台。该平台借助软硬件协同运作,能够产生多源、多频段、多体制的电磁信号,并融合空间、时间、频谱等参数,构建高逼真度的电磁环境,为电子对抗、通信、雷达等系统的研发、测试、训练及评估工作提供重要支持。   应用案例   目前,已有多个复杂电磁环境模拟系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润复杂电磁环境模拟系统。这些成功案例为复杂电
    华盛恒辉l58ll334744 2025-04-23 10:29 180浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦