1. 封装

这个最简单了,C语言中虽然没有类,但有struct。这可是个好东西。我们可以在一个struct中存入数据和函数指针,以此来模拟类行为。


typedef struct _Parent
{int a;int b;void (*print)(struct _Parent *This);}Parent;

封装性的意义在于,函数和数据是绑在一起的,数据和数据是绑在一起的。这样,我们就可以通过简单的一个结构指针访问到所有的数据,遍历所有的函数。封装性,这是类拥有的属性,当然也是数据结构体拥有的属性。

2.继承

如果要完全地用C语言实现继承,可能有点难度。但如果只是简单的做一下,保证子类中含有父类中的所有成员。这还是不难的。

typedef struct _Child
{  Parent parent;  int c;
}Child;

在设计C语言继承性的时候,我们需要做的就是把基础数据放在继承的结构的首位置即可。这样,不管是数据的访问、数据的强转、数据的访问都不会有什么问题。

3. 多态

这个特性恐怕是面向对象思想里面最有用的了。
要用C语言实现这个特性需要一点点技巧,但也不是不可能的。
我们使用上面定义的两个结构体Parent, Child。简单地描述了一个多态的例子。

#include <stdio.h>
#include <stdlib.h>typedef struct _Parent
{  int a;  int b;  void (*print)(struct _Parent *This);
}Parent; typedef struct _Child
{  Parent parent;  int c;
}Child;void print_parent(Parent *This)
{  printf("a = %d. b = %d.\n",   This->a, This->b);
}  void print_child(Parent *This)
{  Child *p = (Child *)This;  printf("a = %d. b = %d. c = %d.\n", p->parent.a, p->parent.b, p->c);
}  Parent *create_parent(int a, int b)
{  Parent *This;  This = NULL;  This = (Parent *)malloc(sizeof(Parent));  if (This != NULL){  This->a = a;  This->b = b;  This->print = print_parent;  printf("Create parent successfully!\n");  }  return This;
}  void destroy_parent(Parent **p)
{  if (*p != NULL){  free(*p);  *p = NULL;  printf("Delete parent successfully!\n");  }
}  Child *create_child(int a, int b, int c)
{  Child *This;  This = NULL;  This = (Child *)malloc(sizeof(Child));  if (This != NULL){  This->parent.a = a;  This->parent.b = b;  This->c = c;  This->parent.print = print_child;  printf("Create child successfully!\n");  }  return This;
}  void destroy_child(Child **p)
{  if (*p != NULL){  free(*p);  *p = NULL;  printf("Delete child successfully!\n");  }
}  int main()
{  Child *p = create_child(1, 2, 3);  Parent *q;  q = (Parent *)p;  q->print(q);  destroy_child(&p); system("pause");return 0;  }

C语言实现(封装、继承和多态)相关推荐

  1. c语言编程 菲薄拉,C语言设计模式-封装-继承-多态

    快过年了,手头的工作慢慢也就少了,所以,研究技术的时间就多了很多时间,前些天在CSDN一博客看到有大牛在讨论C的设计模式,正好看到了,我也有兴趣转发,修改,研究一下. 记得读大学的时候,老师就告诉我们 ...

  2. 本质论之封装继承和多态的介绍

    关于 类,我有一些话想说 说到类那就说到了面向对象的灵魂了,没有它也就没有了封装.继承and多态这些东西了.我还记得在读研期间每次看到这些都望而却步,甚至我搞不懂对象和类的区别(这里防止有人也不知道区 ...

  3. 黑马程序员_JAVA之面向对象(封装,继承和多态)

    ------- android培训.java培训.期待与您交流!---------- 面向对象 一.面向对象概述 定义: 面向对象(Object Oriented,OO)是软件开过过程中使用一种思维方 ...

  4. Java回顾 封装 继承和多态

    封装 什么是封装 封装:就是隐藏对象的属性和实现细节,仅对外提供公共访问方式. 封装时的权限控制符区别如下: 封装的意义 对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对象 ...

  5. java 继承重写_java 封装 继承 重写 多态

    封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. 好处: 将变化隔离.便于使用.提高重用性.提高安全性 封装原则: 将不需要对外提供的内容都隐藏起来.把属性都隐藏,提供公共方法对其访问. ...

  6. 面向对象 详解笔记 方法 类 对象 封装 继承 重写 多态 接口

    文章目录 面向过程&面向对象 面向过程 面向对象 什么是面向对象 回顾方法及加深 方法的定义 修饰符 返回类型 break:跳出switch,结束循环和return的区别 方法名:注意规范就o ...

  7. C语言设计模式-封装-继承-多态

    快过年了,手头的工作慢慢也就少了,所以,研究技术的时间就多了很多时间,前些天在CSDN一博客看到有大牛在讨论C的设计模式,正好看到了,我也有兴趣转发,修改,研究一下. 记得读大学的时候,老师就告诉我们 ...

  8. java 封装 继承和多态

    2019独角兽企业重金招聘Python工程师标准>>> 多态无处不在.引用的概念最为困难.理解了引用才能理解多态的意义以及应用. 多态的应用的一大前提是继承.以及继承中的重写方法.继 ...

  9. Java语言高级-02继承与多态-第4节 多态

    多态的概述 面向对象的三大特征:封装性,继承性.多态性 extends继承或者implements实现,是多态性的前提 多态的格式与使用 package demo05; /* 代码当中体现多态性,其实 ...

  10. python类与对象 封装继承与多态 0308

    类与对象 初始化方法 init方法 带参实例化类 del方法 str方法 私有 继承 方法的重写 super 父类名称调父类方法 调用父类私有 间接调用 多继承 新式类经曲类 多态 类属性 类方法 静 ...

最新文章

  1. Intellij IDEA 中无法下载 Cloud Toolkit 问题解决
  2. 焦点轮播图——myfocus焦点图库
  3. 计算机社区活动,计算机与信息学院“e修哥”党支部进社区开展志愿服务活动...
  4. 重复运行JUnit测试而没有循环
  5. java删除csv一行_在Java中读取CSV文件时跳过第一行
  6. 与体育行业有关的e–r图_国家体育产业统计分类
  7. vxlan技术是一种什么技术?
  8. 7-2 sdut-oop-5 计算长方体和四棱锥的表面积和体积(类的继承) (10 分)
  9. web开发设为首页、添加到收藏夹实现方法
  10. 2021年茶艺师(中级)新版试题及茶艺师(中级)考试总结
  11. 仿小米通讯录 右侧滑动条与带动画的悬停列表实现(一)
  12. mac查找字符串并替换
  13. DRV8825步进电机驱动详细说明书————含接线图
  14. 第三十八章 短语动词
  15. Spring-Quartz使用
  16. 苹果手机用的linux系统,苹果最差的手机竟是它,你有用过吗?
  17. OpenGL glut OFF 读取 + 半边数据结构存储
  18. vue全局注册一个文件夹下所有的组件
  19. requests实例3:百度360搜索引擎关键字提交
  20. oracle ERP凭证打印样式,Oracle ERP二次开发中特色鲜明的Web打印模式设计与实现

热门文章

  1. 云服务器备份(Cloud Server Backup Service,CSBS)
  2. java setscale_BigDecimal.setScale(int newScale, int roundingMode)方法实例
  3. 通过KEGG数据库获取某通路内基因list
  4. 【BZOJ5060】魔方国 特判
  5. Echarts折线图案例
  6. 第二次网页前端培训笔记(HTML P4-P7)
  7. idea maven projects 工具栏按钮的作用
  8. app上传AppStore被拒绝的各种原因
  9. 帝国CMS仿《手艺活》DIY手工制作网源码/92kaifa仿手艺活自适应手机版模板
  10. shell 数组去重,去掉重复