关闭

C语言里用结构体和指针函数实现面向对象思想

发表于:2016-12-28 10:07

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:风移    来源:51Testing软件测试网采编

  虽然我们可以在 c 语言里面用这种方法实现面向对象的程序设计,但是这样毕竟不如用 java 之类的比较适合面向对象的语言来写有面向对象思想的程序。因为 java 的类里可以进行赋值、调用函数等功能而 c 里的结构体不能。 java 取消了程序员使用指针的权限,因为如果在这种高度封装的语言里使用指针很可能造成很多错误。
  从这里看,面向对象和面向过程程序设计思想的区别在哪里呢?面向对象的程序可能需要更多的封装,它的每一个对象都是为执行特定的功能而封装的,对象与对象之间相对比较独立,关系清晰,便于程序的功能细化、管理维护,但是也会造成程序的代码量增大。面向过程的程序封装的主要是一些数据结构,一个函数、变量可以被以多种角度来使用,这样使程序变得十分精简短小,但是不容易修改和补充。
  我们写程序是用来解决问题的,而且要解决的是现实中的问题,所以我们需要将现实问题转化为符号化的问题,而现实中的问题是由个体所组成的,所以我们将数据和处理数据的方法封装起来形成一个个体,这个个体在问题里面有专门的功能,比如一张纸可以折叠,一支笔可以写,这样有助于我们以自身的角度进行思考分析,这就是面向对象。如果用面向过程的思路,会导致问题与程序之间的转化不好处理,可能使解决问题出现偏差。
  二、扩展研究
  1、动态开辟内存空间的函数有哪些?
  答: c 语言有三个函数可以动态开辟数组: malloc 函数、 calloc 函数、 realloc 函数。
  c 语言提供了 malloc 函数和 free 函数用来执行动态内存分配和释放,这些函数维护一个可用内存池, malloc 函数可以从内存池中提取一块合适的内存, free 函数用来释放这块内存以供别的程序使用。 Malloc 函数分配的是一块连续的内存,返回值是一个指向被分配的内存块起始位置的指针。 Malloc 实际分配的内存可能比你请求的的多一点,也可能不会,这是由编译器决定的。但是 malloc 也可能分配失败,如果操作系统无法向 malloc 函数提供足够的可用内存,那么它会返回一个 NULL 指针。 Malloc 返回的指针类型为 void * 型。 Free 的参数必须要么是 NULL ,要么是 malloc 函数、 calloc 函数、 realloc 函数返回的值。
  Calloc 函数的参数是所需元素的数量和每个元素的字节数,而不是总的字节数。 Calloc 会把分配的内存都初始化为 0 ,而 malloc 不会初始化。
  Realloc 函数用于修改一个原先已分配的内存块的大小,如果原先的内存块大小无法改变,那么 realloc 会分配另一块正确大小的内存,并把原先那块内存的内容复制到新的块上。如果 realloc 的第一个参数为 NULL ,那么它的作用和 malloc 一样。
  三、研究总结
  这一章里我们学习了动态分配内存的方法,以及怎么使用宏定义,其实它们都是为了更好地进行封装。为了对程序进行更好地封装,人们使用了各种方式,甚至开发了封装性更强的高级语言,这使我们解决专门问题的能力更强了。这样我们编程只是将共性实现为个性。因为语言只是工具,程序员应该更专注地研究算法而不是把时间花在语言上,所以现在的语言都是为了简化程序员的工作所造成的。
  我们封装的过程,是对事物进行抽象的过程,也是对事物进行认识的过程,我们从开始到现在,封装的层次越来越深,处理的问题也越来越复杂。因为我们需要理清复杂问题的内部规律,从而找出解决问题的办法,而深层次的封装使问题恢复成本来的样子就是一种解决办法,当封装的程度达到了一定的水平,就是面向对象的程序设计思想。
22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号