




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章常量与引用
学习目标了解define与const的区别掌握const的不同应用掌握引用方法掌握引用拷贝构造函数的使用方法constfor(inti=0;i<=100;i++){……}#defineMAX100#definefun(a)a*5……ints=fun(3+5);fun(a)=3+5*5const使用方法格式:注意:尽量把const定义放进头文件里,由此通过包含头文件,把const定义放在一个需要放置的地方。当定义一个常量(const)时,必须初始化,即赋初值给它。const
类型名
对象名;例如:constintMAX=100;intiDataList[MAX];const使用方法程序设计中,如果不想改变某个数值,就应该声明它为“常量”。常量的使用一是消除不安全因素,二是消除存储和读操作,使代码的执行效率更高。[例4-1]常数组与常对象。constintDATALIST[]={5,8,11,14}; //合法使用,定义一个常量数组structMyStruct{inti;intj;};constMyStructsList[]={{1,2},{3,4}}; //正确,定义一个结构体常量数组charcList[DATALIST[1]]; //错误floatfList[sList[0].i]; //错误const与指针const与指针的结合使用,有两种情况:用const修饰指针,即修饰存储在指针里的地址;修饰指针指向的对象。为防止混淆使用,采用“最靠近”原则。指向常量的指针定义格式例如:constint*p;intconst*p;const
类型名*
指针变量名;const与指针常指针定义格式例如:inti=4;int*constq=&i;i=5;*q=6;可以使用一个常指针指向一个变量,也可以把非const对象变为const对象。例如:
inti=4;int*constp=&i; //可以用const指针指向一个非const对象constint*constq=&i; //可以把非const对象地址赋值给const对象指针类型名*
const
指针名;const与指针可以用指向字符的指针来指向字符串,例如:char*p=“hello!”;
constchar*q="hello!"; //正确,非const指针,const数据constchar*constp=“hello!”; //正确,const指针,const数据可以把非const数据对象地址赋给const指针,但是不能把const对象的地址赋给指向非const对象的指针inti=5;constintj=3;int*p=&i;//int*q=&j; //错误,把const对象的地址赋给指向非const对象的指针int*s=(int*)&j; //强制转换,合法,但是不建议这样使用const与函数函数与const结合应用有两种方式:参数为const类型;返回值为const类型。const类型参数定义格式例如voidf(constinti){i++; //错误}voidf(constint*p){(*p)++; //错误}返回值类型函数名称(const类型参数名,……)const应用const类型返回值可以用const修饰符修饰函数的返回值,即函数返回一个常量值,此常量值既可以赋给常量(对常量初始化),也可以赋给变量。[例4-2]返回值为常量的函数[例4-3]常对象的使用const在传递地址中的应用在函数的实参与形参结合时的传递地址过程中,对于在被调用的函数中不需要修改的指针或对象,用const修饰是合适的。[例4-4]常指针使用举例const与类在类里建立一个const成员时不能赋初值,只能在构造函数里对其赋初值,而且要放在构造函数特殊的地方。classconClass{constintNUM;public:conClass();};conClass::conClass():NUM(100){}错误示例:classconClass{constintNUM=100; //错误
intiData[NUM]; //错误
public:conClass();};const与类静态常量classStudent{staticconstintNUM=30;intiScoreList[NUM];……};constintStudent::NUM;classStudent{staticconstintNUM;……};constintStudent::NUM=30;const与类enum(枚举)
classStudent{enum{NUM=30};intiData[NUM];public:
conClass();};enum{MAX=100,SUM=200,NEXT};const与类常对象与常成员函数constinti=10;constconClasscTest(10);const成员函数定义格式[例4-5]const成员函数与非const成员函数使用方式比较class类名{……
返回值类型成员函数名称(参数列表)const;……};引用(&)引用是C++的一大特点,是支持C++运算符重载的语法基础,也为函数参数的传入与传出提供了便利。如果不想改变参数,则可通过常量引用传递。引用被认为是某个变量或对象的别名,引用定义格式:例如:intx;int&y=x;引用类型使用方法举例类型名
&
引用名
=被引用的对象名称;引用(&)引用(&)像一个自动能被编译器逆向引用的常量型指针。使用规则如下:当引用被创建时,它必须被初始化(指针则可以在任何时候被初始化)。
一旦一个引用被初始化为指向一个对象,它就不能被改变为对另一个对象的引用(指针则可以在任何时候指向另一个对象)。没有NULL引用。必须确保引用是和一个合法的存储单元关联。当定义一个引用时,必须被初始化指向一个存在的对象,也可以这样写intn;int&m=n;int&j; //错误,没有初始化引用(&)为引用再提供一个引用,也是合法的,例如:intx=5;int&y=x;int&z=y;使用引用时注意:不能建立引用数组,例如:intiData[5];int&icData[5]=iData; //错误不能建立引用的引用,例如:inti;int&&j=i; //错误引用与指针引用与指针有着本质的区别,指针通过变量的地址来间接访问变量,而引用通过变量的别名来直接访问变量。[例4-9]指针和引用使用方法的对比[例4-10]数组、指针和引用的使用方法对比引用与函数采用引用的主要用途之一就是做函数的参数使用。首先看一则经典的使用函数交换两个变量值的例子。[例4-11]使用指针和引用交换对比。[例4-12]不能返回一个不存在的或已销毁的变量的引用。
int&tcite2(){intm=2;//returnm;//错误,调用完函数tcite2()后,临时对象m将被释放,返回值为一个空引用
staticintx=5;returnx; //正确,x为一静态对象,不会随着函数tcite2()的结束而结束}引用与函数[例4-13]正确使用指针和引用做返回值的例子。[例4-14]对常量引用的例子。voidt1(int&){}voidt2(constint&){}intmain(){ //t1(1);//错误,在函数t1()中,可以修改参数内容,而1为常量
t2(1); //正确,在函数t2()中,参数声明为常量}拷贝构造函数不仅可以由构造函数创建对象,也可以通过已有对象创建新对象。[例4-15]统计类声明对象个数。拷贝构造函数定义格式[例4-16]例4-15修改的例子。[例4-17]跟踪程序运行时,当前Point类对象的个数。构造函数名(const
类名&
);classA{…Public:A(); //构造函数
A(constA&); //拷贝构造
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能家电产品研发及应用合作协议
- 关于合同事务往来的文书范例
- 智慧校园建设及运营合作协议
- 职工爱岗敬业责任协议书
- 股权投资合作协议书
- 建房承包施工合同
- 特殊教育机构教育服务安全免责协议书
- 田径体育场馆租赁合同书
- 股份制组织架构优化方案
- 全国滇人版初中信息技术七年级上册第三单元第14课《数据的计算-用函数计算数据》教学设计
- 第九单元跨学科实践活动8海洋资源的综合利用与制盐教学设计-2024-2025学年九年级化学人教版(2024)下册
- 河南省郑州市外国语学校2025届高考压轴卷英语试卷含解析
- 2024年教育创新:五年级下册美术教案新解读
- 储能电池模组PACK和系统集成项目可行性研究报告
- DB12T990-2020建筑类建设工程规划许可证设计方案规范
- 2023-2024学年九年级三调语文试卷(含答案)
- 交通运输概论课件:综合交通运输体系
- 医学教材 矮身材儿童诊治指南
- 医学教程 常见急腹症的超声诊断课件
- ppr管材合同模板
- 航空器维修工程师考试考核试卷
评论
0/150
提交评论