【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

记得还在我们大学C++第一门课的时候,老师就告诉我们说,C++是一门面向对象的语言。C++有三个最重要的特点,即继承、封装、多态。等到后来随着编码的增多和工作经验的积累,我也慢慢明白了面向对象的含义。可是,等我工作以后,使用的编程语言更多的是C语言,这时候我又想能不能把C语言变成面向对象的语言呢?等到后来通过思考和实践,我发现其实C语言也是可以面向对象的,也是可以应用设计模式的,关键就在于如何实现面向对象语言的三个重要属性。

(1)继承性

typedef struct _parent
{int data_parent;}Parent;typedef struct _Child
{struct _parent parent;int data_child;}Child;

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

(2)封装性

struct _Data;typedef  void (*process)(struct _Data* pData);typedef struct _Data
{int value;process pProcess;}Data;

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

(3)多态

typedef struct _Play
{void* pData;void (*start_play)(struct _Play* pPlay);
}Play;

多态,就是说用同一的接口代码处理不同的数据。比如说,这里的Play结构就是一个通用的数据结构,我们也不清楚pData是什么数据,start_play是什么处理函数?但是,我们处理的时候只要调用pPlay->start_play(pPlay)就可以了。剩下来的事情我们不需要管,因为不同的接口会有不同的函数去处理,我们只要学会调用就可以了。

C语言和设计模式(继承、封装、多态)相关推荐

  1. C++设计模式-继承与多态影响耦合性(最基础的简单工厂模式小实例)

    继承与多态影响耦合性(最基础的简单工厂模式小实例) 原理: 通过继承和虚函数的方式修改某个子类对应函数的功能: 通过简单工厂模式到底实例化谁; 如果要增加复杂的运算只有增加响应的子类,以及工厂的分支即 ...

  2. 面向对象之三大特性:继承,封装,多态

    python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到⼀个对象中. 把固定功能的代码封装到⼀个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情况具体分 ...

  3. java 继承 封装 多态 详解

    1.继承 1.1子类能够继承父类的哪些成员? 1.1.1 public 成员 1.1.2 protected 成员 1.1.3 同一个包中:缺省访问类型的成员 1.1.4 打死不能继承private成 ...

  4. 继承 封装 多态 (基础)描述性理解

    面向对象程序设计具有:封装性,继承性,多态性. 1封装 封装是面向对象编程的核心思想.将对象的属性和行为封装起来,其载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想.例如我们使用的电脑,电视, ...

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

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

  6. JavaScript 继承 封装 多态实现及原理详解

    封装 就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏. 封装是面向对象的特征之一,是对象和类概念的主要特性. 简单的说,一个类就是一个封装了 ...

  7. Java语言高级-02继承与多态-第7节内部类

    内部类的概念和分类 如果一个事物的内部包含另一个事物,那么这就是一个类内部包含另一个类 例如:身体和心脏的关系.又如:汽车和发动机的关系. 分类: 1.成员内部类 2.局部内部类(包含匿名内部类) 成 ...

  8. 【Java设计模式 面向对象设计思想】一 再谈面向对象和封装、抽象、继承、多态四大特性

    回看最初的目标:[Java设计模式 学习目标及大纲]高质量代码的标准及实现路径在这篇Blog里我们明确了什么是高质量的代码:易维护.易读.易扩展.灵活.简洁.可复用.可测试,也知道高质量代码的达成路径 ...

  9. 前端 JavaScript 设计模式前奏--面向对象-封装、继承、多态

    JavaScript 面向对象 如图所示: 1. 什么是面向对象 1. 面向对象的概念 2. 面向对象的三要素: 继承/封装/多态 ⭐️ 3. JS 的应用举例 4. 面相对象的意义 --- 数据结构 ...

  10. 设计模式学习笔记(四)封装、继承、多态、抽象能解决什么问题?

    面向对象编程及面向对象编程语言的关键就是理解其四大特性:封装.抽象.继承.多态. 1. 封装(Encapsulation) 所谓封装性,封装也叫做信息隐藏或者数据访问保护.类通过暴露有限的访问接口,授 ...

最新文章

  1. WindowsPhone基础琐碎总结-----数据绑定(一)
  2. java算法 第七届 蓝桥杯B组(题+答案) 3.凑算式
  3. 申请美国计算机科学,美国计算机科学(Computer Science)申请条件
  4. 使用Apache Lucene 4.3轻松进行搜索
  5. .net 笔记尝试(二)
  6. 大学生期末网页制作代码以及网页设计排版技巧
  7. Google I/O 2021:在重要时刻提供帮助
  8. curl api接口获取当前IP地址
  9. 年中大促,华硕破晓PX574特惠专场,直降400!
  10. 【谁年轻时没YY过】财务自由后的某一天
  11. SingleTask和SingleInstance详解
  12. Tengine-Kit人脸检测及关键点
  13. 图书馆数据库资源访问方法
  14. 风清清,雨霖霖,青剑低啸吟,月色如银
  15. Today今天便利店的梦想:准独角兽的雄心与挑战 1
  16. 2022年,元宇宙是否能结束争议?
  17. Eclipse汉化教程(详细图解)
  18. Qt之QTableView、QTableWidget
  19. 2020年系统集成项目管理工程师考试目标及要求
  20. Tiva C(TM4C)的bootloader和启动过程与stm32对比

热门文章

  1. CentOS7.0下NTP时间同步服务
  2. 2017华南理工华为杯H bx值(容斥问题)
  3. Hive过滤脏数据的一些经验
  4. ASP.NET Web API 开篇示例介绍
  5. python3.3使用tkinter实现猜数字游戏代码
  6. CentOS6.5安装python2.7.6(慎重升级)
  7. JavaScript语言精粹 ——笔记
  8. 为什么Java中只有值传递
  9. Docker 安装、镜像、dockerfile、容器、仓库
  10. 创建使用模块与datetime模块使用