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. c语言结构体继承 多态,C语言设计模式-继承、封装和多态

    前言 代码写的多了,也就越来越体会到设计模式的重要性,尤其是构建软件架构的时候,一个好的架构能减少大量的工作: 另外学会了设计模式也能更好的理解大牛们写的代码,而不至于拿到好项目的源码却无从下手: 所 ...

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

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

  4. java 继承 封装 多态 详解

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

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

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

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

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

  7. 关于C语言中继承和多态的实现

    以下的内容综合了多篇文章,加上一点自己的理解而成.目的为了给自己阅读他们文章后做一个笔记.在末尾给出了这些文章的地址. 多态的实现可以采用以下几种方式:     (1)使用 vod * (万能指针)来 ...

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

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

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

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

  10. c语言编程继承例子,C语言模拟实现C++的继承与多态示例

    一.面向过程编程与面向对象编程的区别 众所周知,C语言是一种典型的面向过程编程语言,而C++确实在它的基础上改进的一款面向对象编程语言,那么,面向过程与面向对象到底有什么样的区别呢? [从设计方法角度 ...

最新文章

  1. matlab 画函数图像
  2. 关于引进制转换(凌乱)
  3. unittest里discover用法_unittest框架核心要素及应用
  4. linux内核运行关系图,一张图看懂Linux内核运行交互关系
  5. (转)Linux下的输入/输出重定向
  6. 杭电1492 The number of divisors(约数) about Humble Numbers
  7. 学习英语,先记下留着后用
  8. Android Studio 每次运行都会再下载一遍,修改
  9. HTML5页面实现文件下载
  10. 人机对话系统的对话管理
  11. Spring-boot JPA笔记 Failed to create query for method public abstract 踩坑记录~
  12. linux各种命令手册
  13. 第8章 hive函数
  14. spring-cloud-oauth2
  15. bde oracle 商友的流程_BorlandC++使用BDE访问Oracle的方法
  16. 如果不是对的人,最终的结局大概不会好吧
  17. 【语音控制ROS】PocketPhinx语音包的使用<三>
  18. 微信小程序自定义card图文组件
  19. [ArcPy] 代码汇总
  20. 辽宁大学计算机测控技术专业排名,测控技术与仪器专业大学排名

热门文章

  1. 关于论青少年尽早学少儿编程之说
  2. Powerpoint发现中的内容有问题,Powerpoint 可尝试修复此演示文稿。
  3. 网络基础——IP地址子网掩码MAC地址DNS(详解)
  4. MS SQL2016的安装
  5. 华为ENSP——ACL访问控制列表
  6. 数据备份恢复软件专业数据保护Acronis True Image 2021 25.7.1
  7. 百度提示:违法违规网页,建议关闭的解决方案
  8. 库存管理习题:第三章
  9. android 调用系统播放器播放视频,适配android 7.0以上
  10. 快速有效地封杀—巧利用Iris来查找蠕虫病毒(转)