面向过程的语言(C语言是面向过程的语言,C++是面向对象的语言,该怎么理解)
本文目录
C语言是面向过程的语言,C++是面向对象的语言,该怎么理解
问题的提法不准确
准确来说,C不是面向过程的语言而是结构化语言。由于早期的PASCAL语言是以“过程”来定义程序功能单元的,因此结构化语言经常被误解为面向过程的语言。面向过程的语言是以FORTRAN为代表的一类语言。
首先,我们讨论一下面向过程,结构化和面向对象三种语言的特征。
面向过程的语言是以过程处理为导向对处理过程进行排序,数据流贯穿于处理过程。其特点是根据时间流或处理顺序对程序进行编制。典型代表是BASIC,FORTRAN,主要应用于有限元,数值积分等科学计算程序的编制。现存的面向过程的语言极为罕见。
结构化语言是将程序的处理机能进行分类并分别对其进行封装。同时,对数据按其归属进行分类、封装。最后,根据问题的逻辑机构关系对各封装块进行拼装。结构化语言的基本特征是以功能处理模块和数据结构模块为基本单元进行程序构建。其典型代表为C。
面向对象的语言是在结构化语言的基础上根据对象将结构化的功能和数据按其对象的归属进行分类后将其结构化并进行封装。面向对象可以被理解为较结构化更加深入的结构化。面向对象的语言是从C++开始的。
经过对三类语言的分析,我们不难看出,C和C++实际上是一种语言的两个阶段,C是婴幼儿,C++则是成熟后的C。
老师说C语言是面向过程的编程语言,它能使用面向对象编程吗如何使用
谢谢邀请。
其实,“面向过程”和“面向对象”只是程序开发中的一种方法,或者说一种思想,大多数现代高级编程语言都能使用这两种编程思想,C语言当然也不例外。
只不过,有些编程语言在语法上支持“对象”,而C语言则没有原生的“对象”语法。不过借助于灵活的指针和结构体语法,在C语言程序开发中使用“面向对象”思想也是很简单的。
malloc() 和 free() 函数
鉴于题主可能是C语言初学者,在开始讨论如何使用C语言进行“面向对象”开发之前,先介绍两个新函数——malloc() 和 free() 。
如果题主看过我之前文章的话,应该明白C语言程序每调用一次函数,系统就会在栈中分配一块栈帧给被调用函数,当函数执行完毕后,这部分栈帧就自动被系统收回了。
malloc() 函数的作用是申请一块指定大小的内存,它的C语言原型如下,成功时返回这块内存的首地址,失败时返回 NULL。
C语言程序中函数的局部变量占用的内存,是函数运行时,自动在其所属栈帧中分配的,所以局部变量会随着函数结束释放。不过,malloc() 向系统申请的内存在堆区里,这部分内存不会随着函数的退出自动释放,需要程序员自己使用 free() 函数释放:
以上这几行C语言代码的意思是向系统申请 5 字节的内存,如果申请成功,就把它释放。
如果在C语言程序退出之前,只 malloc() 而不 free(),程序占用的内存会越来越多,直到最后崩溃退出。这种情况,程序员习惯称为“内存泄漏”。
使用C语言进行“面向对象”编程
相当一部分程序员看不起C语言是因为他们觉得C语言没有“对象”。现在,我们尝试给C语言找一个“对象”。请看:
因为C语言不支持原生的“类”语法,所以我们使用结构体模拟了一个 class,定义了一个“FATHER 类”,它有成员函数 hello()。
上述C语言代码又定义了一个“SON 类”,它有成员函数 hello(),也有成员变量 count(),还有一个“父类”father。接下来,定义“FATHER类”和“SON类”的 hello 函数,相关C语言代码如下:
如何让这两个函数与我们定义的“类”产生联系呢?我们定义“构造函数”:
上述C语言代码首先使用 malloc() 为 son 在堆中申请一块内存,这保证了 son 在程序结束之前都不会被释放。同样的,为 father 也申请了一块内存。
接着,把它们各自的函数传递给结构体里面定义的函数指针,这样便定义好了“类”son。有了构造函数,再来定义“析构函数”,相关C语言代码如下:
析构函数的主要作用就是释放 malloc() 的内存,防止内存泄漏。至此,我们就使用C语言实现了“类”的封装,测试一下:
上述C语言代码是典型的“面向对象”风格:程序使用 SON 类实例化了一个 son 对象,son 调用了自己的成员函数,也调用了从“父类”继承而来的函数。编译并执行这段C语言代码,发现输出与预期一致。
应该注意的是,从表达式 son-》hello(son) 可以看出,C语言没有类的支持,所以需要显式的把 son 指针传给 hello。但是,“father类”和“son类”里都可以使用 hello 做函数名,这说明C语言的“类”也对封装有很好的效果。
欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍C语言、linux等嵌入式开发,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。
面向对象语言和面向过程语言的编译器有什么区别
首先 面向对象和面向过程说的是思想,与编译器无关
面向对象: 在程序中一切皆为对象,比如人可以吃、跑、睡等,但不用去管他具体是如何去吃的,只要拿到一个人,让他吃就可以了
面向过程: 同样是让一个人吃,放到面向过程就要把他细化了,比如先张嘴,放入食物,然后闭嘴,不停咀嚼,最后下咽等
编译器可以分为编译型和解释性:
编译型编译器: 像c语言这样,在写完程序后经过编译链接,直接生成可执行文件的,叫编译型
解释型编译器: 像Java这种, 写完后可以直接运行,当然还要生成字节码文件,不过内容没有太大变化,靠Java虚拟机逐条执行,为解释性编译器
相对来说,解释型编译对源代码的保密做的不太好,而编译型直接将源码编译成底层语言,对源代码起到了保密的作用
本文相关文章:
c语言经典算法100例(在c语言中有什么十分经典或者巧妙的算法)
2024年7月24日 15:56
c语言程序设计第三版(软件工程大一新生,自学C语言用c程序设计第三版还行吗)
2024年7月22日 00:31
面向对象的四个基本特征?java语言面向对象程序设计马俊版课后习题答案
2024年7月20日 23:22
c语言自学要多久(学会了C语言,多久可以熟悉JAVA学会JAVA能干什么)
2024年7月18日 04:24
易语言网页api接口怎么调用(易语言 怎样快速掌握API学习)
2024年7月15日 18:14
谭浩强c语言入门(看完谭浩强那本C程序设计并做完所有课后习题,能算C语言入门了吗)
2024年7月15日 07:24
世界上最好的编程语言(Python是世界上最好的开发语言吗)
2024年7月15日 03:28
c语言ascii码表(用c语言如何实现十进制转ASCII码)
2024年7月14日 15:04
c语言和python哪个好(管理专业暑假想学编程,该学习C语言还是Python)
2024年7月7日 16:52
c十十编程教学(C语言与C++哪个难零基础初学者先学哪个好)
2024年7月3日 22:19
在c语言中,c++与++c有什么区别?关于VB中print的用法
2024年7月2日 05:43
编程语言总共哪几种分别是用来干什么的!?Java语言有哪些特点
2024年7月1日 19:43
更多文章:
仙剑奇侠传5激活码能用几次(仙剑5激活码,在官网看到说是可以激活2台电脑,台式和笔记本)
2023年8月22日 22:40
芭比娃娃小游戏(求一个芭比娃娃设计衣服的游戏,1999年玩的,不是小游戏,是光碟版)
2024年2月7日 12:20
俄罗斯方块消消消正版下载(玩俄罗斯方块消消消时广告怎么消除)
2024年7月25日 15:30
易采工程设备物资采购平台官网大于100M的文件如何处理?企业级采购平台哪个好易采办怎么样推荐几个靠谱点的
2024年7月2日 16:48
新浪微博怎么发长微博图片?新浪微博长微博怎么发找不到这个选项了
2024年6月3日 02:36
腾讯一键root工具(如何利用腾讯Android一键Root获取手机权限)
2024年7月8日 12:19
英雄连2:阿登突击和英雄连2:西线军团有什么区别?英雄连2正版如何汉化
2024年6月27日 14:07
玩dnf的玩家到腾讯公司dnf部门上班是一种怎样的体验?在腾讯工作是一种什么样的体验
2024年7月4日 07:04