




已阅读5页,还剩52页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+程序设计,C+基础知识,第2章C+基础知识,本章学习要点,从C程序到C+程序的发展历程简单的C+程序C+的输入输出、数据类型、函数及指针C+的常变量、引用、名字空间、字符串变量C+程序的编写和实现,第2章C+基础知识,本章学习目标,了解从C程序到C+程序的发展历程对简单的C+程序有整体的感性认识掌握C+对C的扩充掌握C+的输入输出、数据类型、函数及指针掌握C+的常变量、引用、名字空间、字符串变量熟悉C+程序的编写和实现流程,2.1从C到C+,C到C+的发展历程,C+3.0,C+1.0,带类的C,89年,增加类的多继承,91年,增加模板,增加异常处理、名字空间、运行时类型识别,97年,成为标准,2.2简单C+程序,通过简单的C+例子认识C+程序,【例2-1】在屏幕上输出一行字符“HelloC+!”。/=#include/包含头文件命令usingnamespacestd;/使用名字空间stdintmain()coutHelloC+!b;/等待用户从键盘输入数据couta+b=sum(a,b)sexage;/输入数据至私有数据成员voidShow()/公用成员函数Showcoutname:name;/输出私有成员name的值coutsex:sex;/输出私有成员sex的值coutage:age、radius;coutTheareaofcircleis:PI*radius*radiusendl;return0;/=,注意const的位置,一般见到的const的位置可能在类型的前面,但是const也可以在变量名前面,并且两者的含义完全相同。,2.3.4指针,指针的概念指针是一个重要概念,如果使用得当可以使程序高效、简洁、紧凑。如果对指针掌握不牢固,编程则会出现意想不到的错误指针是内存单元的地址经常所讲的指针是指针变量的简称,是用来存放指针(地址)的变量。本节重点讨论C+中使用指针需要注意的地方,2.3.4.1指针与0,空指针空指针表示“未分配”或者“尚未指向任何地方”的指针空指针一般用来判断内存分配是否成功注意:“空指针”与“野指针”的区别在指针上下文中的常数0被编译成空指针程序员更常使用符号常量NULL来表示空指针,2.3.4.1指针与0,【例2-5】指针和0/=#includeusingnamespacestd;intmain()int*p=0;/定义空指针pint*q;/定义野指针qintx=100;/定义整型变量x并初始化为100/*p=50;/若执行则编译出错,不能使用空指针*q=50;/编译通过,但不知把50写到何处p=q=/输出变量x的值/=,注意编程时养成定义指针时初始化为空指针,使用指针时判断是否为空指针的好习惯,可以减少程序中指针的许多错误。,2.3.4.2指针与const,【例2-6】指向const变量的指针。/=#includeusingnamespacestd;intmain()constint*p=NULL;/定义指向const变量的指针pconstinta=10;/定义常变量ap=/=,通过本例可以看到可以改变指向const变量的指针的指向,但是不能通过指针修改指针指向单元内容,2.3.4.2指针与const,通过本例可以看到可以改变const指针指向单元的内容,但是不能改变const指针的指向。,【例2-7】const指针。/=#includeusingnamespacestd;intmain()inta=10;/定义普通变量aintb=100;/定义普通变量bint*constp=/=,2.3.4.2指针与const,对于指向const变量的const指针,既不能改变指针指向单元的内容,也不能改变指针的指向。,【例2-8】指向const变量的const指针。/=#includeusingnamespacestd;intmain()inta=10;intb=100;constint*constp=/=,2.3.4.2指针与const,小结指针和const的关系比较复杂,const有两个位置,可形成三种指针:1.只在“*”之前有const的指针,称为指向const变量的指针;2.只在“*”之后有const的指针,称为const指针;3.“*”前后都有const的指针,称为指向const变量的const指针。,2.3.4.3void指针,void在作为函数类型和参数类型时为空类型,表示没有返回值或参数。void修饰指针时称为“无类型指针”,表示该指针可以指向任意类型的变量。虽然void指针可以指向任意类型的数据,但是在使用void指针时必须对其进行强制类型转换成它所指向单元的实际类型,然后才可以使用,2.3.4.3void指针,【例2-9】void指针的声明与使用。/=#includeusingnamespacestd;intmain()intx=100;void*p=/=,2.3.4.3void指针,为什么要使用void指针因为void指针可以指向任意类型的数据,所以使用void指针时把void指针所指向的数据给抽象化了,这样可以增加程序的通用性使用void指针的两个例子,void*memcpy(void*dest,constvoid*src,size_tlen);,void*malloc(unsignedintsize);,2.3.4.4new和delete,C语言的动态内存管理malloc()和free()函数主要缺点函数的返回值是void*类型分配内存单元时根据参数size的值来分配,无法检查错误分配到的内存单元无法初始化C+中使用new和delete运算进行动态内存管理,2.3.4.4new和delete,【例2-11】使用new和delete动态管理内存单元。/=#includeusingnamespacestd;intmain()int*p=NULL;/定义整型指针pp=newint;/用new申请可以存放一个整型数据的内存单元cout*p=*pendl;/输出指针p指向单元的内容deletep;/delete释放指针p指向内存单元return0;/=,2.3.4.4new和delete,申请内存空间并进行初始化指针变量=new数据类型(初值);分配多个连续变量的存储空间使用new和delete指针变量=new数据类型元素个数;delete指针变量;,三种动态内存管理的方式:兼容C语言的malloc/free方式,单个变量的new/delete方式,多个变量的new/delete方式,2.3.5引用,引用就是某一变量的别名,对引用的操作与对变量直接操作完全一样引用的声明方法类型标识符,“intmain()intx=100;/定义整型变量xint/=,程序执行后运行的结果如下:rx=100 x=200,2.3.5引用,【例2-13】编写一个函数,交换两个整型变量的值。/=#includeusingnamespacestd;voidswap(int/=,通过函数交换两个变量的值有三种形式:值传递、地址传递和引用传递。其中值传递不能实现交换的目的,引用传递和地址传递都可以实现,但引用传递的形式更简单。,2.3.5引用,引用和const可以用const对引用加以限制,不允许改变该引用的值const引用和语法const类型标识符利用常引用作为函数形参,既能提高程序的执行效率,又能保护传递给函数的数据不在函数中被改变,达到保护实参的目的,2.3.5引用,引用作为函数的返回值,【例2-14】引用作为函数的返回值。#includeusingnamespacestd;int,由于函数的返回值为引用类型,所以可以为函数赋值,为函数赋的值赋给两个参数中的大者,所以a的值为2,b的值为4,2.3.6函数,面向过程的C+程序中的函数与C语言中的函数基本相同面向对象的C+程序中的函数有成员函数和公共函数之分主要讨论面向过程的C+程序中函数与C语言函数的区别,2.3.6.1函数原型声明,在函数尚未定义的情况下,先将函数的形式告诉编译系统,以便编译能够正常进行函数原型声明的语法形式有两种:,(1)返回值类型函数名(参数类型1,参数类型2,.);(2)返回值类型函数名(参数类型1参数名1,参数类型2参数名2,.);,函数原型声明和函数定义是不同的。函数原型声明不是一个独立的完整的函数单位,它仅仅是一条语句,因此在函数原型声明后面一定要加上分号。,2.3.6.2函数默认参数,在多次调用一个函数将实参传递给形参时,其中可能有一个或几个参数,它们传递进来的实参值多次相同在定义或声明函数时,给形参一个默认值,如果在调用时没有给该形参传递实参值,则使用默认值作为该形参的值;如果调用时给该形参传递了实参值,则使用实参的值作为该形参的值。,2.3.6.2函数默认参数,【例2-16】求两个或三个正整数中的最大值,使用带有默认参数的函数实现。/=#includeusingnamespacestd;intmain()intmax(int,int,int=0);/带有默认参数的函数原型声明inta=5,b=8,c=10;coutmaxofaandbis:max(a,b)endl;/调用默认参数的函数coutmaxofa,bandcis:max(a,b,c)endl;return0;intmax(inta,intb,intc=0)/定义带有默认参数的函数if(ab)a=b;if(ac)a=c;returna;/=,2.3.6.2函数默认参数,1.指定默认值参数默认值的位置:为了避免混淆,最好只在函数原型声明时指定默认值。2.当只有部分形参带有默认值时,带有默认值的参数必须放在形参表的右端。3.当一个函数既是重载函数,又是带有默认参数的函数时,要注意不要出现二义性的问题,注意,调用带有默认参数的函数时,实参的个数可以与形参的个数不同,对于实参未给出的,可以从形参的默认值中获得,利用这一特性,可以使函数的使用更加灵活。,2.3.6.3函数与引用,函数的参数是引用当使用引用作为函数的形参时,引用不是一个单独的变量,不需要在内存中分配存储单元,实参向形参传递的是变量的名字,而不是变量的地址。使用引用作为函数的形参可以部分代替指针,降低了程序的复杂度,提高了程序的执行效率,同时也提高了程序的可读性。函数的返回值是引用,2.3.6.4函数与const,const修饰函数的参数调用函数时用相应的值初始化const常量函数体按照const所修饰部分进行常量化const修饰函数的返回值用于二目操作符重载函数并产生新对象const修饰整个函数这种情况发生在类的成员函数时const的位置放在函数参数表的后面,2.3.6.5函数重载,一般情况下,一个函数名对应一个功能特殊情况下,一个函数名对应多个功能功能是非常类似参数不同,【例2-18】使用add为函数名定义整数的加法和两个浮点数的加法intadd(inta,intb)/整数加法的add函数定义coutCallintegeraddfunction.endl;returna+b;floatadd(floata,floatb)/浮点数加法的add函数定义coutCallfloataddfunction.endl;returna+b;,2.3.6.5函数重载,函数重载需要函数参数的类型或个数必须至少有其中之一不同,函数返回值类型可以相同也可以不同。但是,不允许参数的个数和类型都相同而只有返回值类型不同。从语法上来说,可以让两个或多个完全不相干的函数使用相同的函数名,进行重载,但是这样做使得程序的可读性下降,不建议这样做。使用同名函数进行重载时,重载函数在功能上应该相近或属于同一类函数。,2.3.6.6内置函数,调用函数时系统需要一定的时间和空间的开销当函数体很小而又需要频繁调用时,运行效率与代码重用的矛盾变得很突出系统在编译时将所调用的内置函数的代码直接嵌入到主调函数中执行时就不会发生函数调用,而是顺序执行,2.3.6.6内置函数,【例2-20】将函数声明为内置函数。/=#includeusingnamespacestd;intmain()intx=3,y=5;ints;inlineintadd(inta,intb);/内置函数原型s=add(x,y);/调用函数addcouts=sendl;return0;inlineintadd(inta,intb)returna+b;/定义内置函数add/=,2.3.6.6内置函数,1.在声明内置函数时,可以在函数声明和函数定义的前面都写上关键字inline,也可以只在其中一处写上关键字inline,效果都是相同的。2.内置函数是一种“以空间换时间”的策略。3.对函数进行内置声明,只是程序员对编译系统的一个建议而非命令,并不一定只要声明为内置函数C+系统就一定会按内置函数去处理,系统会根据实际情况决定是否这样做。4.内置函数的机制适用于被调函数规模较小而又被频繁调用的情况,注意,2.3.7名字空间,1.为什么需要名字空间引用名字空间的概念就是为了解决程序中名字冲突的问题2.什么是名字空间所谓名字空间就是一个由程序设计者命名的内存区域根据需要指定一些有名字的空间域,把一些全局标识符放在各个名字空间中,从而避免与其他同名的全局标识符混淆,2.3.7名字空间,3.如何使用名字空间定义名字空间时,语法如下:其中成员的类型包括:常量、变量、函数、结构体、类、模板等,还可以是名字空间,namespace名字空间名定义成员,2.3.7名字空间,定义名字空间举例:namespacensconstintRATE=0.08;doublemoney;doubletax()returnmoney*RATE;namespacens2intcount;,如果要访问名字空间ns中的成员,可以采用名字空间:成员名的方法,如ns:RATE、ns:money、ns:tax()、ns:ns2:count等,可以看到,在访问名字空间的成员时可能
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年城市生态修复项目社会稳定风险评估与生态修复项目风险评估与风险控制报告
- 信访知识培训课件
- 辽宁省丹东市东港市2024-2025学年七年级上学期期中教学质量监测道德与法治试卷(含答案)
- 中小企业公共服务平台建设方案
- 2025年传媒互联网行业投资策略分析报告:AI应用落地机会景气娱乐赛道
- 输电安全课件
- 小麦病虫害防治图谱课件
- 小鸭子课件模板
- 农业企业注销与土地流转及农民权益保障协议
- 城市四区住房保障家庭租赁补贴协议及资金监管执行
- 2025年上海市共有产权住房预售合同(示范文本)
- 2025驻村工作计划
- 医疗器械管理制度
- Unit 5 Here and Now (大单元教学设计)2024-2025学年七年级英语下册同步备课系列(人教版2024)
- 劳动监察申请书范本
- 电瓶车撞车调解协议书(2篇)
- 2025年度信息技术项目劳务派遣合作合同模板
- 专利权属协议年
- 人才战略合作协议书
- 解放战争完整版本
- 塑造五种心态培训课件4
评论
0/150
提交评论