用 C 语言理解封装、继承、多态

打印 上一主题 下一主题

主题 1013|帖子 1013|积分 3039

前言


  • 个人邮箱:zhangyixu02@gmail.com
  • 本文主要是给一些做嵌入式软件开发,并且非计科的朋侪做科普。使用 C 语言理解封装、继承、多态等概念。
正文


  • 基类:最底子的结构体或函数。
  • 派生类:基类的继承+本身的特性。
  • 封装:将数据和操作数据的函数联合在一起,隐藏内部实现细节,仅对外提供接口,提高了代码的安全性和可维护性。例如 Animal 结构体中,有数据 name ,还有 speak 操作方法。
  • 继承:Dog 结构体可以包罗 Animal 结构体的成员,从此拥有 name 和 speak 这两个成员变量。
  • 多态:通过函数指针实现,给函数指针赋不同的值,用户调用雷同的方法 myDog->base.speak(); 能够产生不一样的效果。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. // 基类,将数据和操作方法结合起来,这个叫做封装
  4. typedef struct {
  5.     int name;
  6.     void (*speak)(void);  // 函数指针用于多态,我们给这个函数指针赋值,可以指向多个类型数据
  7. } Animal;
  8. // 基类方法
  9. void animal_speak(void)
  10. {
  11.     printf("Animal sound\n");
  12. }
  13. //     派生类
  14. typedef struct
  15. {
  16.     Animal base; // 继承自 Animal
  17.     int age;     // 自己的特性
  18. } Dog;
  19. // 派生类方法
  20. void dog_speak(void)
  21. {
  22.     printf("Woof!\n");
  23. }
  24. // 创建 Dog 对象
  25. Dog* create_dog()
  26. {
  27.     Dog* dog = (Dog*)malloc(sizeof(Dog));
  28.     dog->base.speak = dog_speak;  // 设置多态行为
  29.     return dog;
  30. }
  31. // 销毁 Dog 对象
  32. void destroy_dog(Dog* dog) {
  33.     free(dog);
  34. }
  35. int main() {
  36.     // 创建一个 Dog 对象
  37.     Dog* myDog = create_dog();
  38.     // 调用多态方法
  39.     myDog->base.speak();
  40.     // 销毁 Dog 对象
  41.     destroy_dog(myDog);
  42.     return 0;
  43. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

莫张周刘王

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表