- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅析C在非OOP方面对C改进
浅析C在非OOP方面对C改进
【摘 要】C++是在C语言的基础上发展起来的面向过程程序设计和面向对象程序设计的一门通用语言,它不仅引入了类和对象等重要概念,而且对C语言的不足进行了改进。本文结合作者多年教学实践,从函数、引用、I/0、内存分配等方面,对C++在非OOP方面对C的改进进行了详细地分析和总结。
【关键词】C++ OOP 引用
在面向对象的程序设计OOP(Object-Oriented Programming)方法出现以前,我们主要采用面向过程的程序设计方法,C是面向过程的程序设计语言的典型代表。早期的计算机主要用于科学计算等领域,例如计算炮弹的飞行轨迹,主要是设计出一个计算方法或解决问题的过程,所以早期的软件开发所面临的问题比较简单。随着计算机领域的扩展,计算机所处理的问题日益复杂,软件系统的规模和复杂性空前扩大,以至于软件的复杂度和其中所包含的错误让程序员无法控制,所以就产生了60年代初期的软件危机。面向对象的程序设计技术很好的解决了问题,而C++语言正是面向对象思想和技术的具体体现。C++是在C的基础上发展起来的,不仅引入了类和对象、继承、多态等概念,而且在非OOP方面对C也进行了改进和扩充。
一、函数方面
(一)重载/过载(overload)
C++中允许两个或者多个不同的函数可以使用同一个函数名,即一个函数名可以对应多个函数的实现。这是C++增强的功能,C语言中是每个函数必须有唯一的名称。例如可以在一个程序中定义两个同名的函数int s(int x,int y){return x+y}和int s(int x,int y,int z){return x+y+z}。同一函数被多次定义或实现,编译器会根据函数参数个数或参数类型的不同来正确的调用。在使用重载时,需要注意一下四点1.不能因为返回值类型不同而重载。例如:int max(int a,int b)和float max(int a,int b)。2.重载不是重复。例如:int max(int a,int b)和float max(int c,int d)。3.不能因为typedef而重载。如:typedef int INT; int max(int a,int b); float max(INT a,INT b),因为typedef定义的是新的类型的名字,而不是新的类型。4.防止有二义性的调用。如:int fun(int a,int b=0); int fun(int a),用fun(3)去调用。
(二)内联函数(inline function)
因为我们在调用函数时,需要先保存现场状态和返回地址,然后转到子函数的代码起始地址去执行,子函数执行完后,又需要取出先前保存的返回地址和现场状态,再继续执行,这一切都需要时间和空间方面的开销,因此对一些功能简单,规模较小,使用频繁的函数,可以设计为内联函数。声明格式:inline 类型说明 函数名(形参表);内联函数具有一般函数的特性,不同之处在于对函数调用的处理,它不是在函数调用时发生转移,而是在编译时由编译器将函数体嵌入到每一个函数调用的语句处,这样就节省了参数传递和控制转移等开销,从而解决了函数调用的效率问题。因为函数有跳转和返回时,程序执行的效率会急剧下降。他从功能上相当于C中的宏,却没有宏的副作用,即消除了使用宏定义#define带来的不安全性(产生这个问题的原因是:C中宏定义#define的代码是被直接展开的,而C++的内联函数的代码是被替代的)。使用时应该注意:1.内联函数体内不能有循环语句和switch语句。2.内联函数的定义必须出现在第一次被调用之前。3.编译时用函数代码替代了调用语句,增加了目标程序的代码量,虽然不发生跳转了,节省了时间,却增加了空间开销,可见,它是以空间增大的代价来换取时间的节省。
(三)函数原型(function prototype)
C语言建议我们为每个函数建立原型,而C++则要求必须为每个函数建立原型,说明函数的返回值类型、函数名称、参数类型及个数。只要函数调用在自定义函数之前,程序员必须在源代码中说明函数原型。函数原型可不包含形参变量名,只包含形参数类型名。如:int fun(int ,int);等价于int fun(int a,int b);目的是在编译时检查调用函数是否与预先说明的原型一致,以维护程序的正确性。函数原型格式为:返回类型 函数名(参数表);使用函数原型时应注意:1.函数原型是一条语句,必须以分号结束。2.当一个函数的定义在前而调用在后时,可以不写它的原型,因为这时的函数定义的说明部分就起到了函数原型的作用。3.主函数不必说明原型,它被认为是一个自动说明原型的函数,且不存在被调用的问题。4.函
文档评论(0)