C 语言面向对象的封装方式

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

C语言是面向过程的编程语言,一个程序的运行逻辑就是由一个个函数调用构成,函数里面会操作各种各样的数据结构。
因此,函数和数据结构,是C程序中的两大组成部分。

通常,我们接触的大多数C程序,代码的逻辑组织关系就如下图所示:
 

这种程序中,数据结构与函数是一种松耦合关系,数据结构的内部成员,对所有函数都是可见的,都是可读写的。一个函数会直接操纵多个数据结构,从而实现特定的业务逻辑。


这种设计的优点是:简单。数据结构和函数可以分开进行设计,适用于小型项目、快速构建原型。


但这种方式最大的问题是:当数据结构需要变化时,访问这个数据结构的大量函数都需要相应改动,工程量太大,在大型项目中几乎无法进行。需求变化时,会出现这类场景,在对历史代码进行重构时,也会出现这种场景。

 

因此,在大型项目中,更推荐的方式是封装。封装这个术语,常见于面向对象的编程语言中,其核心思想是将数据结构的内部构成、函数逻辑的实现对外界屏蔽,外界仅能通过其提供的接口函数来实现对数据结构的操纵、对特定逻辑的调用。


封装,即包括了对数据结构的封装,也包括了对函数逻辑的封装。

 

C语言,尽管不是面向对象的编程语言,但依然可以实现优秀的封装能力。

采用封装的设计思想后,C程序的代码逻辑组织关系就变成了:
 

</

C 语言面向对象封装方式(示例) 前一篇文章,我介绍了C语言编程常见的两种代码组织方式:1)函数和数据结构分离 2)封装,从原理上讲述这两种方式的根本区别。 大型项目中,推荐采用封装方式,有利于团队协作和每个模块独立演进。 本文,给出一个代码示例,具体展示这两种方式在代码实现上的差别。 业务场景描述如下: 对于数据库、文件系统、存储系统等,数据通常以页(Page)为单位,在数据文件中进行组织。服务进程以页为最小IO单位从磁盘上读出,并在内存中缓存这个页面。后续业务过程如果读取的数据在这个页中,则直接从内存页获取数据。如果要写入新数据. 阅读详情

相关推荐

C语言实现面向对象之继承性

面向对象有三个最为明显的特性:继承、封装、多态性。C++、java、C#等面向对象语言语言层次上支持OOP,而OOP本身其实并不是专门为语言设计的。虽然C语言语言层次上不支持面向对象,但是通过C语言也是可以实现OOP的特性的。 下面就主要讲述通过C语言实现面向对象的三大特性之一:继承性。 “继承”是面向对象中的一个概念,如果一个类A继承自另一个类B,就把这个类A称之为类B的子类,而B类则是

helinlin007的专栏 6724

C语言实现封装、继承和多态

作者:Dong | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址:http://dongxicheng.org/cpp/ooc/ 1、  概述 C语言是一种面向过程的程序设计语言,而C++是在C语言基础上衍生来了的面向对象语言,实际上,很多C++实现的底层是用C语言实现的,如在Visual C++中的Interface其实就是struct,查找Interfac

铁匠Smith先生的专栏 2636

C语言的简单封装

简单的log封装,适合新手学习,拿过来开源直接使用,非常方便

c 语言中的封装

谈及封装,大多数人首先会想到面向对象设计。封装其实是一个泛型的概念,虽然在面向对象设计中更容易体现出来,却也能够在面向过程的语言中找到应用领域。在本文中,我浅谈下 c 语言中涉及到的封装概念。 c 语言是一种面向过程的语言。单就面向过程本身而言并没有太多与封装相关的内容,可一旦我们跳出对封装性的局限思索,那么我们会发现其中不仅用到了封装,而且还算用的相对较多。下面我就 c 语言中每一种可以看做封装...

龙瑜的博客 4663

C语言程序的封装

所谓程序的封装就是把源代码隐藏,但是功能依旧可以正常使用,当我们想把代码的功能给出,但又不想暴露源码时,可以用到C语言程序的封装。废话不多讲,直接讲操作步骤。 举一个例子,方便说明,就举一个加法程序吧。 生成静态库(.lib) 将头文件和源代码生成静态库。 这是加法程序的源代码和头文件 在add的属性栏将配置属性中的常规的配置类型改为静态库。 在运行程序时会报错,没关系,因为没有主函数,没有办法运行,但是可以编译。 在add文件的debug文件中找到静态库文件。 将静态库文件和

lyzzs222的博客 7318

面向对象编程与C语言封装、继承和多态

面向对象编程(Object-Oriented Programming,简称OOP)是一种常用的编程范式,它以对象作为程序的基本单元,通过封装、继承和多态等机制来组织和管理代码。- 继承是指通过已有的类(称为父类或基类)来创建新的类(称为子类或派生类),子类可以继承并扩展父类的属性和方法。- 定义一个通用的函数接口,不同的对象可以使用不同的函数实现该接口,实现不同的行为。- 多态是指相同的操作可以作用于不同的对象,并根据对象的类型执行不同的行为。// 子类新增的属性。

m0_75198698的博客 542

C语言学习笔记—封装

我们知道每个对象都有一组属性和一组附加在其上的功能,将这些属性和功能放入名为对象的实体中,这个过程叫做封装封装过程首先在我们的头脑中发生,然后被转变为代码,当我们觉得一个对象需要一些属性和功能时,就会在脑海中进行封装,然后,将封装转变到代码级别。对象由一组属性和一组功能组成,不论是属性还是功能都应该封装到对象胶囊中,我们先看一下其中的属性封装

weixin_71643870的博客 2462

C语言面向对象编程

虽然C语言不支持访问控制,但我们可以通过定义接口函数,并在文档中说明这些函数的使用方式,通过命名约定(例如,将“私有”函数的名称前缀为下划线)来进行一定程度的封装。通过以上的讨论和示例,我们可以看到,尽管C语言不是一种传统的面向对象编程语言,但我们依然可以通过使用结构体、函数指针和组合等技术,在C语言中实现面向对象的特性。这种灵活的编程方式不仅增强了代码的可维护性和可读性,也提高了程序的设计效率。C语言面向对象编程是一个有趣的主题,它挑战了我们对编程语言和编程范式的理解。

2501_90372930的博客 629

C语言面向对象编程:模拟实现封装、继承、多态

本文探讨了在C语言中模拟面向对象编程的三大特性:封装、继承和多态。通过结构体封装数据和函数指针,实现了类的基本结构;利用结构体嵌套模拟继承关系;借助函数指针实现多态行为。具体展示了String和Person类的封装实现、Student类的继承实现,以及Animal/Dog/Cat的多态示例。这种模拟方式虽然需要手动管理类型转换和函数绑定,但能有效提升C语言代码的模块化和扩展性,为理解面向对象底层机制提供了实践参考。

C语言、数据结构、单片机、嵌入式实时操作系统、C++ 学习路径记录 1197

C 语言实现面向对象编程

c语言面向对象编程

zhen 913

从面向过程到面向对象——C语言面向对象编程特性

从面向过程走向面向对象——C语言走向C++

sun_0228的博客 1210

C++ 与 C 的那些事儿:深度剖析两者区别

抽象是从具体的实例中提取共同的特征,形成抽象类或接口,以便于代码的复用和扩展。抽象类和接口可以让程序员专注于高层次的设计和业务逻辑,而不必关注底层的实现细节C 语言本身不直接支持面向对象的继承和多态特性。虽然可以通过一些技巧和结构体的组合来模拟部分类似的功能,但与 C++ 中完善的面向对象机制相比,要复杂得多且不够直观。

xafarsight的博客 1410

C++和面向对象——会C语言就能学会面向对象

2.1.1.从高处看面向对象 2.1.1.1、面向对象是一种编程思想 (1)面向对象并不是C++特有的,所有编程语言都可以面向对象 (2)面向对象语言就是设计语言特性时充分考虑并且原生支持面向对象特征的那些编程语言 (3)面向对象之于编程,就好像比喻修辞法之于写作 (4)面向对象只是编程语言语法层面的东西,不影响最终生成的二进制程序,也不关CPU的事儿 (5)深度装x:面向对象是一种哲学 2.1.1.2、面向对象并不是一个单一概念 (1)面向对象三大特征:封装、继承、多态 (2)面向对象还会延伸出很多细节,

小嵌同学的博客 876

用C语言实现面向对象中的封装

我们都知道面向对象的三大特性是:封装,继承,多态。我们知道C语言是面向过程的编程语言,C++是面向对象的编程语言,当然也可以用C++写面向过程的程序,C++是面向对象和面向过程的统一。 我们首先来看一段C++代码: #include <iostream> #include <string> using namespace std; class Demo { ...

weixin_42136255的博客 593

C语言面向对象设计”--不仅是看起来有点像

最近帮个同学debug C程序,闲暇之余也没有闲着,查过很多资料后,对C语言的理解深了一点。C语言不愧为世界IT的基石,即使历经几十 年,依然经久不衰。 我也只能这样跟风称赞几句,至于其中的深奥,实在不得领会,或者,根本不用领会。 进入正题,怎样用C语言来实现面向对象模式。为何有这个想法,是在看《设计模式初学者指南》中,序言中提到过,面向对象从来不是语言 ,而是方法

CaptainQiu CodeSpace 924

浅谈Java面向对象和C语言的实现

面向对象java中最重要的部分可以说就是它的三大面向对象的特性:继承、封装和多态了。 而以前学过C语言,C 主要是面向过程编程用得比较多,但是是不是它就不可以实现面向对象编程了呢,也不是。封装封装:隐藏了内部实现,保护了数据,不允许外部程序直接访问,同时可以在不影响使用了该类的代码的情况下修改内部实现代码。 Java中用得最频繁的 特性就是封装了,不但方便而且安全,使用封装好的类的人不需要关心内部

underbook的博客 1662

C语言面向对象编程之一:封装与继承

最近在用 C 做项目,之前用惯了 C++ ,转回头来用C 还真有点不适应。 C++ 语言中自带面向对象支持,如封装、继承、多态等面向对象的基本特征。 C 原本是面向过程的语言,自身没有内建这些特性,但我们还是可以利用 C 语言本身已有的特性来实现面向对象的一些基本特征。接下来我们就一一来细说封装、继承、多态、纯虚类等面向对象特性在 C 语言中如何实现,并且给出实例。     这篇文章中我们先

CoolBreeze的博客 256
上一篇: 为什么不推荐C++?
下一篇: C 语言面向对象的封装方式
实力程序员K
博客等级 码龄5年 16粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值