100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 老师说C语言是面向过程的编程语言 它能使用面向对象编程吗?如何使用? – 网络

老师说C语言是面向过程的编程语言 它能使用面向对象编程吗?如何使用? – 网络

时间:2019-05-29 18:43:40

相关推荐

老师说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等嵌入式开发,喜欢偶的文章就关注一波吧,可以看到最新更新和之前的文章哦。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。