浅析C++在非OOP方面对C的改进

来源 :数字化用户 | 被引量 : 0次 | 上传用户:Tengshuo
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  【摘 要】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.函数的原型中如果没有写返回类型,则C++的默认返回类型为int。5.如果没有返回值,函数必须声明为void,比如把main()声明为void,则主函数中就不用写有return 0了。
  (四)缺省参数(default parameter)
  C++中可以在说明函数原型或函数定义时,给一个或多个参数指定缺省值,这样在调用该函数时,如果省略了其中的某个参数,系统会自动以用户指定缺省值作为该参数的值。例如:int f(int x,int y=10);在编程时需要注意:1.当一个函数带有多个参数时,C++没有规定函数调用时实参的求值顺序,而编译器根据对代码进行优化的需要自行规定对实参的求值顺序,有的编译器规定自左向右,有的自右向左,如果实参表达式中带有副作用的运算符(++,--等)时,可能造成二义性。例如:int add_int(int x,int y){return x+y;}void main(){int c=4,d=6;cout<< add_int(++c,c+d)<  intfun(int a,int b)不能写成int a,b;int fun(x,y)。而且变量定义的位置不一定在函数的首部,可以在任意位置。C中要求所有局部变量的定义必须在执行语句之前。
  二、引用(Reference)
  引用是某个变量或者对象的别名。引用的值将随所引用的变量的值而改变。定义格式:<类型>&<引用名>=<初始值>;例如:int m;int &n=m;n就是m的引用。需要注意的是:1.引用不占单独的内存空间, 上面的m和n是同一变量单元。2.声明引用时,必须对它初始化,不能声明完成后再赋值。3.指针是通过地址间接访问变量,引用是通过别名直接访问变量,使用引用可以简化程序。4.引用运算符“&”仅在声明引用时使用,其他时候“&”依然表示地址操作符。引用的主要用途是可以用做函数参数和函数的返回值。
  三、其他当面
  (一)常量推荐用const代替define
  例如:const double pi=3.1415926;const产生一个具有类型的常量。const定义一个局部变量,define范围为整个源文件。使用const定义常量是一个标准说明语句,以分号结束。
  (二)动态内存分配时使用new和delete。new和delete操作符是C++语言的一部分,无需包含头文件
  从C++的立场来看,不能使用C语言中的malloc()函数的一个原因是,它在分配空间时不能调用构造函数。类对象的建立是分配空间、构造结构以及初始化的三位一体,他们统一由构造函数完成。而用new创建对象时,会自动调用构造函数,用delete删除对象时,也会自动调用析构函数。
  (三)I/O流类控制
  C语言提供的scanf()和printf()标准输入输出函数存在缺陷:非类型安全,不可扩充。比如C++中大量的类和对象并不是基本数据类型,C语言的输入输出函数根本无法识别,因此C++提供了一个I/O流库,用cin对象来处理标准输入,用cout来处理标准输出。
  (四)支持单行注释//
  我们可以用C语言中的/*……*/进行大范围注释,而用//……进行单行注释。
  四、结论
  C++语言是在C语言的基础上发展起来的,它继承了传统C语言的精华,增加了面向对象的特征,还在面向过程方面对C语言进行了许多的扩充和改进。本文从函数、引用、I/0、内存分配等方面,对这些改进进行了详细地分析,希望对C++相关编程人员有所帮助。
  参考文献:
  [1]吕凤翥.C++语言基础教程(第二版)[M].北京:清华大学出版社,2007.
  [2] Bruce Eckel.C++編程思想[M],北京:机械工业出版社,2011.
  [3] Stanley B.Lippman.C++Primer(第四版) [M].北京:人民邮电出版社,2008.
  作者简介:
  张永超(1980-),男,汉族,陕西宝鸡人,吉林化工学院讲师,主要从事计算机高级程序设计与数据库等方面的研究。
其他文献
【摘 要】本文分别从灭火特点、灭火系统的工作原理以及对人体的影响三个方面出发,谈了谈IG100与IG541自动灭火系统的比较。  【关键词】IG100 IG541 比较  气体灭火系统是由灭火剂储存装置在规定的时间内通过系统管网和喷头向保护区喷射气体灭火剂,使保护区内达到设计所要求的灭火设计浓度,并能将该气体浓度保持一定的浸渍时间,以达到扑灭火灾,并不再复燃的灭火系统。为了确保尽可能地减少对人类赖
期刊
【摘 要】随着计算机网络技术、多媒体通信技术等迅猛发展,视频会议系统是现代军事信息化建设的现实要求,是实现清晰流畅的音视频效果,进行互动交流和信息沟通的主要方式。本文主要从视频会议系统概念入手,阐述视频会议的功能以及存在问题和发展趋势。  【关键词】视频会议 功能 问题 发展趋势  视频会议技术的迅速蓬勃发展,在现代军事中的应用也自然而然的出现并且发展起来了,视频会议系统利用视频通信系统可以实现远
期刊
【摘 要】本文提出了一种可配合手机以及PC端进行在线支付的音频交易终端,该终端是在华虹自主研发的1408S芯片的基础上进行开发完成,主要实现USBKEY,动态令牌,银行卡,读卡器,磁条卡等功能,特别是利用手机音频这种新型的通讯方式实现与手机支付完美结合,终端配有个人密码键盘,在网络支付方面大大提升了安全性能。  【关键词】音频 支付 终端  一、引言  近几年,随着银行卡IC化的大规模推广,IC银
期刊
【摘 要】本项目采用OMRON公司新型PLC及台达伺服控制系统,对搬运设备进行定位控制,提高了设备的控制精度同时又降低了设备的投资成本,方便了工序的操作。  【关键词】可编程控制器 HMI 伺服放大器  一、引言  随着伺服控制技术的发展,对于过去由液压马达或者变频器进行定位的设备,逐步被控制精度更高的伺服控制系统所取代,其定位精度高等优点极大的提升工厂技术装备的水平,为工厂的质量控制及效益的最大
期刊
【摘 要】本文通过在液压系统中埋入传感器实时监测系统的运行状态,充分利用模糊理论的信息处理能力和神经网络的自学习、函数逼近能力,进行液压系统状态参数的融合及其故障诊断。通过实例仿真实验发现模糊神经网络在液压系统故障诊断中具有操作简便、可靠性高、自动化程度高等优点。  【关键词】模糊神经网络 液压系统 故障诊断  随着模糊信息处理技术和神经网络技术研究的不断深入,将模糊技术与神经网络技术进行有机结合
期刊
【摘 要】为了使机械加工的自动化和智能化,本文中设计了一种基于Zigbee协议的星形网络结构的无线控制设计方案。可实现单个主机对多台数控机床的远程控制,这种方法改变了传统的工控机与机床“一对一”的控制方式,是机械加工更加便利。  【关键词】Zigbee协议 无线 星形 数控机床  一、设计来源及简介  数控机床是数字控制机床(Computer numerical control machine t
期刊
【摘 要】AutoCAD在应用方面可能需要根据自身不同的需求,量身定制不同功能,来强化CAD的功能,以便于开发设计人员降低工作强度,提升效率。本文依托Visual Lisp编辑器,以AutoLisp语言为基础,对AutoCAD在非标件自动化设备开发中的常用的命令程序二次开发,组立图的拆分零件图,做到自动拆分图面,这样可以有效降低工作符合,提升工作效率。  【关键词】AutoCAD AutoLisp
期刊
【摘 要】随着虚拟现实交互技术的研究和运用日益深入和广泛,对虚拟场景的真实感和沉浸感都提出更高的要求。目前交互引擎也种类繁多,而且大都功能强大,画面效果表现力亦很强,本文提出以unity3D为交互引擎系统的开发解决方案,介绍采用unity3D游戏引擎构建虚拟河下古镇交互漫游系统的框架,着重阐述虚拟场景交互漫游的方法及实现,包括一个以三维等手段的系统完整制作流程以及一个以路径漫游、天气变化系统、碰撞
期刊
【摘 要】当今社会是一个网络信息技术飞速发展的社会,在建设医院的信息系统时,网络通信的作用不容小觑。可是,网络环境在发展的同时日渐复杂化,在网络中总是存在一些不安全因素,例如网络黑客攻击网站等,这对医院的计算机系统造成了不小的威胁。所以,要加强在网络安全方面的管理,保证医院信息系统在安全的环境下运行。本文通过对在网络环境下的医院信息系统的安全管理工作进行分析,并提出了相应的管理措施。  【关键词】
期刊
【摘 要】采用自动化生产线电子控制系统,有助于对现场的灵活性以及信号的传输进行有效地控制,为数据的查询提供更多的便利。本文将主要围绕自动化生产线电子控制系统的设计研究展开论述。  【关键词】自动化生产线 电子控制系统  加强负极片自动化生产线的开发和研究,有助于改善劳动者的工作条件,提高其工作效率。下面,我们主要对其生产工艺流程控制、程序逻辑控制系统的实现以及控制系统硬件设计进行详细地阐述。  一
期刊