C++引用.ppt_第1页
C++引用.ppt_第2页
C++引用.ppt_第3页
C++引用.ppt_第4页
C++引用.ppt_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、引用,1,引用的概念,引用就是一个变量或对象的别名。当定义引用时,用一个目标对象的名字对引用作初始化,从而让引用和目标对象建立起联系,对引用的操作就是对目标对象的操作。 这好比是在一个班里,有个学生叫“张小明”,同时他有个绰号叫“小猪”,那么班里的同学都明白,叫“张小明”和叫“小猪”实际上都是指同一个人。引用具有类似的概念。,2,引用的声明,引用的声明需要用到引用运算符“ 在上面的代码里,定义了一个整型变量,然后声明了对变量a的引用ra。注意引用的声明方法是:先写上目标对象的数据类型,然后跟引用运算符“ int b = 20; int /错误,引用在声明后不能指向其他目标对象,5,引用的操作,

2、一旦声明了引用,那么对引用的所有操作实际上都是对其引用的目标对象的操作。 /*【例145】 引用操作举例*/ #include using namespace std; void main() ,6,int a = 10; int *pa = ,7,/定义整型变量a,/定义指向变量a的指针pa,/声明变量a的引用ra,/声明指针pa的引用rpa,/输出变量a的地址,/输出引用ra的地址,/通过引用输出变量a的值,/通过指针输出变量a的值,/通过引用操作变量a,/通过引用输出变量a的值,/通过指针的引用输出 指针pa指向的变量a的值,8,从运行结果可以看出,对引用的操作实际上就是对其引用的目标对

3、象本身的操作,包括取引用的地址,得到的结果都是和其引用的目标对象的地址是一样的。 指针也是变量,所以也可以声明指针的引用,如程序中声明的指针pa的引用rpa,要注意这种声明方法。,void main() int a=10; int 运行结果为: 100 100 20 20,9,解释:声明b是对整数a的引用, 并且使其初始化为变量a的一个别名。一旦b同a的内存对象发生了联系,就不能改变,而且,对b的访问就是对a的访问,对a的访问也就是对b的访问。变量a和引用b共用同一内存空间.,10,说明: (1) 引用运算符与地址符使用的符号相同,尽管它们显然是彼此相关的,但它们却不一样,引用运算符只在声明时

4、使用,它放在类型名后面。 例如:int ,11,(2) 与指针类似,下面三种声明引用的方法都是合法的: int /会误解为声明了两个引用 为了提高可读性,不应在同一行上同时声明引用、指针和变量。,12,引用与指针的区别,通过引用和指针,都可以操作它们所指向的目标对象,但是它们在使用上有很大的差别。这种差别主要体现在: 指针是个变量,可以在程序中改变指针所指向的目标;而引用是一个声明,引用不是值,不占内存空间,在声明引用时必须给它初始化,并且引用在初始化后,不可以再关联其他的目标对象。,13,注意,声明引用时,需要指定引用的数据类型,但是并不是所有的类型都可以被引用。如: (1)不能对void进

5、行引用,例如 void 这样的写法是错误的。这是因为void只是在语法上相当于一个类型,但其本质上并不是一个类型,因为没有任何一个变量或者对象其类型是void的。,14,(2)不能对数组建立引用,例如: int a10; int ,15,指针应用举例,1凯撒密码是最古老的替代密码,以英文26个字母为例,它用D表示a,用E表示b,用F表示c,用C表示z,也就是说密文字母相对明文字母循环左移了3位,因此,又称为循环移位密码。这种映射关系表示为如下函数: F(a)=(a+k) mod n 其中: a表示明文字母,n为字符集中字母个数,k为密钥。在映射表中,明文字母在字母表中的相应位置数为C。 例:,

6、16,假设k=3,对于明文 P=COMPUTERSYSTEMS 则 f(C)=(2+3) mod 26=5=F f(O)=(14+3) mod 26=17=R f(M)=(12+3) mod 26=15=P f(M)=(12+3) mod 26=15=P f(S)=(18+3) mod 26=21=V 所以,密文C=EK (P) =FRPSXWHUVBVWHPV 试编写程序实现凯撒密码的加密过程。,17,/*【例146】凯撒密码*/ #include #include using namespace std; void main() const int MAXLEN = 80; char sourceMAXLEN + 1; int key; cout请输入一个字符串endl; cin.getline(source,MAXLEN,n);,18,coutkey; int len = strlen(source); char *pDest = new charlen + 1; for(int i= 0;ilen;i+) pDesti = A + (sourcei - A + key ) % 26; ,19,pDestlen = 0; cout加密后的字符串:endl; coutpDestendl; for(int i=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论