版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C++面向对象程序设计教程第1章C++程序设计根底1.1C++的开展和主要特点1.1.1C++的开展1.1.2C++的特点1.2第一个C++程序以及C++程序开发过程1.2.1第一个C++程序 1.2.2C++程序开发过程1.3C++在非面向对象方面的常用新特性 1.3.1C++的输入输出1.3.2const定义常量函数重载有默认参数的函数变量的引用 1.3.6动态分配/释放内存的运算符new和delete 1.3.7布尔类型1.4程序陷阱1.5补充:变量的定义、数据类型、函数等1.1C++的开展和主要特点1.1.1C++的开展C++由AT&TBellLaboratories的BjarneStroustrup设计和实现的,C++最初的版本被称作“带类的C”1980年第一次投入使用支持面向对象特性在1983年被参加到C++中,在1987年至1989年之间,模板技术被加进了C++C++标准化工作在1990年启动。标准化工作由ANSI〔美国国家标准化组织〕及后来参加的ISO〔国际标准化组织〕负责。1998年正式发布了C++国际标准回忆:C语言的特点(1)C语言既具备高级语言的结构和编程环境,又提供类似于汇编语言那样的系统资源操纵能力及程序执行效率。适合解决有实时要求的问题。(2)有丰富的运算符和数据类型,表达式类型多样化,可以方便地实现在其他语言中较难实现的运算,对各种不同类型的程序设计都有良好的适应性。(3)以函数为根底实现程序的结构化设计,支持大型程序的多文件构成及单个文件独立编译,适合大型复杂程序的设计。(4)可移植性好,语言简洁、紧凑,使用方便、灵活。1.1.2C++的特点一个更好的CC++兼容C,会C的程序员,可在C
的根底上逐步参加C++的新特性支持面向对象程序设计C++通过类支持面向对象程序设计支持范型程序设计在C++中,通过模板简单而实用地实现了范型程序设计技术补充程序设计语言的开展1、开展过程:机器语言汇编语言高级语言(1)机器语言简单的“0”和“1”的组合,与硬件相关。(2)汇编语言将机器语言映射为一些可以被人们读懂的助记符,如“ADD”、“SUB”等,与硬件相关。(3)高级语言接近自然语言,与硬件无关。2、高级语言的开展(1)根底语言,如:Fortran,Basic等;(2)结构化程序设计语言,如:C语言,Pascal等;(3)面向对象程序设计语言,如:纯面向对象的有:Smalltalk,Eiffel,Java;混合型的有:C++,CLOS。例如:要向屏幕打印一个“A”字符1、BASIC语言:PRINT“A”2、PASCAL语言:writeln(‘A’);3、C语言:printf(“A”);4、C++语言:cout<<“A”;5、JAVA语言:System.out.print("A");1、新的研究领域对信息科学、软件工程、人工智能、系统工程和认知科学等学科有重要影响;对在计算机科学与技术的许多方面影响深远。面向对象数据库(OODB,Object-OrientedDatabase)面向对象的系统模拟面向对象的人机交互图形用户界面(GUI,GraphicUserInterface)人工智能和知识工程计算机辅助软件工程(CASE,Computer-AidedSoftwareEngineering)计算机网络设计模拟面向对象技术概述2、定义(Coad和Yourdon)
面向对象=对象+类+继承+消息通信3、作用(1)提高生产效率。表现在:程序可重用性(2)降低维护复杂性。表现在:程序模块化(3)开发大型软件。主要表现在:抽象模型更接近现实世界;模型与程序易于理解;程序具有重用性和模块化;软件易于维护。结构化程序设计与面向对象程序设计的区别1、结构化程序设计60年代后期提出来的(针对当时对goto语句的争论才开展起来的),70年代到80年代非常流行;设计思路:自顶向下、逐步求精、模块化;优点:增强了程序的可读性,程序结构清晰;缺点:软件的可重用程度低,软件很难维护。C语言之父DennisRitchieTheCProgrammingLanguage(1978)2、面向对象程序设计90年代以来才兴起的;设计思路:OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象程序设计);优点:可移植性增强了,可重用性、可维护性好;缺点:有待于大家去发现和体会。C++之父BjarneStroustrupTheC++ProgrammingLanguage(1991)面向对象技术的根本特征根本特征主要有:对象、类、封装、继承、消息、结构与连接、多态性。1、对象(1)定义:客观存在的事物,是构成现实世界的一个独立单位;具体的:一名学生,一台电脑等;抽象的:一次篮球比赛,一次班会等;(2)属性和效劳是构成一个对象的两个重要的因素;属性:对象本身所具有的状态。如:S(S#,SNAME,AGE,SEX);属性分为公有(public)、保护(protected)和私有(private);效劳:是用来描述对象动态特征和行为的一个操作。(3)对象完整的定义:描述事物的一个实体;构成系统的一个根本单元;由一组属性和效劳组成。2、类(1)定义:具有相同属性和效劳的一组对象的集合,为该类的全部对象提供了统一的抽象描述。其内部包含属性和效劳。在面向对象程序设计中,类是一个独立的程序单位。(2)作用:用来定义对象。(3)类的层次结构:人教职工学生教师管理员工人本科生研究生超类(父类)
子类两者的关系:超类是子类的抽象或普通化,子类是超类的特殊化活具体化。3、封装(1)定义:把对象的属性和效劳结合成一个独立的系统单位,隐蔽对象的内部细节。如:一个集成块,我们不关心其内部结构,只关心芯片的引脚个数,引脚的电气参数及引脚提供的功能。(2)特点:一个清楚的边界;一个接口;受保护的内部实现。(3)意义:静态特征和动态特征的不可分割;隐蔽性反映了事物的相对独立性;如:存款:姓名,账号,存款额,利率等属性;计算利息,显示存款金额,转账等效劳。4、继承(1)定义:特殊类的对象拥有其一般类的全部属性和效劳;(2)基类:一般类;派生类:特殊类(3)意义:对程序的理解、修改和维护都变得相对简单;实现了软件的可重用性、模块化。如买大桶的矿泉水商店;顾客;买东西;买大桶什么牌子的矿泉水;付款;案例:5、消息(1)定义:向对象发出的效劳请求;(2)组成:接受者;发送者;要求的效劳;输入信息;输出信息;如买大桶的矿泉水商店;顾客;买东西;买大桶什么牌子的矿泉水;付款;(3)机制流程:创立对象输入信息;发送消息发送者;接受消息接受者;分析处理消息要求的效劳;返回相应的消息输出信息;6、结构与连接分为4种:一般与特殊结构;整体与局部结构;实例连接;消息连接。(1)一般与特殊结构类与类之间的关系,即一般类与特殊类;(2)整体与局部结构对象之间的组成关系;(3)实例连接一对一;一对多;多对多;(4)消息连接效劳的实现方式;如:学生和图书管理员,“我借一本C++的书”。7、多态性指在一般类中定义的属性或效劳在被特殊类继承以后,可以具有不同的数据类型或表现出不同的行为。几何图形椭圆多边形如:绘图(效劳)1.2第一个C++程序以及C++程序开发过程1.2.1第一个C++程序C++程序的结构严谨,下面介绍著名的“Hello,world!”程序,此程序一般用于介绍各种语言的第一个程序程序功能是在屏幕上输出字符串“Hello,world!”。例1.1在屏幕上输出“Hello,world!”//文件路径名:e1_1\main.cpp#include<iostream> //编译预处理命令usingnamespacestd; //使用命名空间stdintmain() //主函数main(){ cout<<“Hello,World!”<<endl; //用C++方法输出一行 system(“PAUSE”); //输出系统提示信息 return0; //返回值0,返回操作系统}程序运行时屏幕输出如下:Hello,world!请按任意键继续...注释上面程序的第一行如下: //文件路径名:e1_1\main.cpp这一行不是程序代码,是注释,告诉读者程序的文件路径名,位于“//”后面的文本都是注释读者应养成给程序添加注释的习惯在C++程序中,可以使用C语言中“/*……*/”形式的注释,还可以使用以“//”开头的注释输出信息例1.1中的main()函数体包含了如下的语句: cout<<"Hello,World!"<<endl; //用C++的方法输出一行cout实际上是C++系统预定义的对象名,称为标准输出流对象。“<<”是“输出运算符”,在上面的代码中将运算符“<<”右侧双引号内的字符串“Hello,World!”插入到输出流中,endl用于表示换行,endl也插入到输出流中,C++系统将输出流的内容输出到系统指定的设备〔一般为显示器〕上C++中也可以用C函数printf()进行输出main()函数中还包含了调用system()函数的语句: system("PAUSE"); //输出系统提示信息 system("PAUSE")函数调用将使程序暂停,以便用户观察执行结果预处理命令和命名空间stdcout需要用到头文件iostream。程序中如下的代码行 #include<iostream> //编译预处理命令 是一个预处理命令,文件iostream的内容提供输入或输出时所需要的一些信息注意:在C语言中所有的头文件都带后缀.h,C++标准要求由系统提供的头文件不带后缀.h,用户自己编制的头文件可以有后缀.h。在C++中也可使用C语言编译系统提供的带后缀.h的头文件,如“#include<stdio.h>”程序的如下代码: usingnamespacestd; //使用命名空间std 表示使用命名空间std。C++标准库中的类和函数是在命名空间std中声明的,程序中可用“usingnamespacestd;”语句声明,表示要用到命名空间std中的内容定义main()函数下面的代码行定义了main()函数:intmain() //主函数main(){ cout<<"Hello,World!"<<endl; //输出一行 system("PAUSE"); //输出系统提示信息 return0; //返回值0,返回操作系统}所有C++程序都由一个或多个函数组成,每个C++程序都必须有一个main()函数定义main()函数定义main()函数的第一行代码如下: intmain() //主函数main() 的int表示main()函数的返回值的类型,表示返回一个整数值,执行完main()函数后将返回给操作系统的一个代码,它表示程序的状态。在下面的语句中,指定了执行完main()函数后要返回的值: return0; //返回值0,返回操作系统 main()函数通常用返回0表示程序正常终止,而返回非0值表示发生了异常标准C++要求main()函数必须声明为int型。有的操作系统〔如Linux)要求执行一个程序后必须向操作系统返回一个数值。但有些C++编译系统并未完全执行C++这一规定,如主函数首行写成“voidmain()”也能通过,本书中的所有例题都按标准C++规定写成“intmain()”。1.2.2C++程序开发过程注意:当前的C++语言开发环境中都集成了以上四个步骤,大大方便了C++语言的开发工作。附录B讨论了常用C++语言开发环境的使用方法。 请同学们至少选择一种〔如能做到两种更好〕C++编译系统,在该环境下输入和运行例题和习题中的程序。程序开发过程
简单的C++程序1、正式的程序从代码“voidmain()”开始,它包含一个名为main()的函数,也称为主函数。每个C++程序有且仅有一个main()函数,程序在开始运行时会自动调用main()函数。main()前面的void表示函数的返回值的类型,意味着程序执行结束后无需向操作系统返回。
3、注释:“注释”是程序员为读者作的说明,用来提高程序的可读性,C++程序在编译过程中忽略注释。(1)“//”用来注释一行说明,在“//”之后的文字直到换行都为注释。一般用来对于程序中难懂的代码进行说明。(2)“/*”和“*/”用来注释一段说明,在“/*”和“*/”之间的局部,不管多长都为注释。2、#include<iostream.h>:每次启动编译器时,先运行预处理器,预处理器找到所有以“#”开头的代码行进行处理。iostream是系统定义的一个“头文件”,它设置了C++的I/O相关环境,并定义了输入输出流对象cout和cin等。
补充C++的字符集26个小写字母
abcdefghijklmnopqrstuvwxyz26个大写字母
ABCDEFGHIJKLMNOPQRSTUVWXYZ10个阿拉伯数字
0123456789
其他符号
+-*/=,._:;?\"'~|!#%&()[]{}^<>空格C++语言根本字符:关键字关键字〔keyword〕:又称保存字。是由系统定义的具有特定含义的英文单词。关键字不能另作它用。C++区分大小写,关键字全部由小写字母组成。标准C++〔ISO14882〕定义了74个关键字,具体的C++编译器会做一些增删。常用关键字及分类见表2.1。数据类型说明符与修饰符boolcharwchar_tclassconstdoubleenumfloatintlongshortsignedstructunionunsignedvoidvolatile存储类型说明符autoexterninlineregisterstatic访问说明符friendprivateprotectedpublic其它说明符asmexplicitnamespaceoperatortemplatethistypedeftypenameusingvirtual
语句与标号breakcasecatchcontinuedefaultdoelseforgotoifreturnswitchthrowtrywhile
运算符及逻辑值deletefalsenewsizeoftrue表2-1C++常用关键字及分类
关键字
还有一些关键字本书未介绍:
const_castdynamic_castreinterpret_caststatic_castexportmutabletypeid下面可用一些关键字代替逻辑运算符:andand_eqbitandbitorComplnotoror_eqXorxor_eqnot_eq关键字标识符标识符〔Identifier,ID〕:是程序员定义的“单词”,用来给变量、常量、数据类型、函数等命名。合法标识符由字母或下划线开始,由字母、数字、下划线组成,其有效长度为1-31个字符,长度超过31个字符者只识别前31个字符,VC++标识符长度为1-247个字符。建议使用有一定含义的英文单词或拼音序列作标识符,以提高可读性;另外尽量不用下划线或双下划线打头,以免与系统定义的关键字冲突。 标识符例:判断下面哪些是合法的标识符:
MyFileSalary94amountvoid94SalarySalary94$amountf3.5Num_of_Student标点符号标点符号:#、()、{}、,、:、;、"、'等。标点符号的作用:有一定的语法意义。如字符和字符串常量分别用‘’和“”引起来。对语法符号起分隔作用。如;等C++中的数据类型C++的数据结构实型float双精度型doubleC++的数据类型基本数据类型非基本数据类型数组type[]指针type*结构struct联合union枚举enum类class整型int字符型char逻辑型bool无值型void实型类型名称占用字节数取值范围bool布尔型
1true,false(signed)char有符号字符型1-128
127unsigedchar无符号字符型10
255(signed)short(int)有符号短整型2-32768
32767unsignedshort(int)无符号短整型20
65535(signed)int(signed)有符号整型4-231
(231-1)unsigned(int)无符号整型40
(232-1)(signed)long(int)有符号长整型4-231
(231-1)unsignedlong(int)无符号长整型40
(232-1)float实型4-1038
1038double双精度型8-10308
10308longdouble长双精度型8-10308
10308void无值型0无值VC++中所有根本数据类型常量和变量变量文字常量常变量在程序中,常量和变量是用来表示数据的;常量又分为字面常量、常变量;变量1变量说明
2变量初始化值
变量,在程序中是指可以改变值的量;变量必须用标识符进行标识,称为变量名;变量有类型之分,如整形变量、字符变量等;任何变量都必须先说明后使用;一是便于编译程序为变量分配空间,二是便于编译时进行语法检查;变量使用的第一步,是给变量赋初始值;变量说明
在C++中,变量说明的一般格式为:《存储类型》数据类型变量名1《,变量名2,
,变量名n》;例:inti,j,k;
//说明三个整型变量i,j,kfloatx,y,z;
//说明三个单精度实型变量x,y,zcharc1,c2;
//说明两个字符型变量c1,c2doubledx;
//说明一个双精度型变量dx
变量初始化赋初值:定义变量时即给变量一个值称为变量初始化或给变量赋初值例如: inta=3,b=4,c=5; floatx=3.0; 变量初始化可以防止引用到随机变量。文字常量1.整型常量
4.字符串常量3.字符型常量2.实型常量文字常量:指程序中直接给出的量;常量的值在程序执行过程中保持不变;并且存储在程序区,而非数据区;根据取值和表示方法的不同,可分为以下几种:1.3C++在非面向对象方面的常用新特性C++在非面向对象方面的常用新特性C++是从C开展而来的,C++对C引入了面向对象的新概念,同时也增加一些非面向对象的新特性,这些特性使C++使用起来更方便与更平安,本节将讨一些常用新特性。1.3.1C++的输入输出为了方便用户,C++还增加了标准输入输出流对象cout和cin。cout代表标准输出流对象,cin代表输入流对象cout和cin都是在头文件iostream中定义的。cin的输入设备是键盘,cout的输出设备是屏幕coutcout是从内存向屏幕流动的数据流。cout必须和输出运算符“<<”配合使用。“<<”在此处起到插入的作用,例如: cout<<"Hello,World!\n"; //用C++的方法输出一行 的作用是将字符串“Hello,World!\n”插入到输出流中,也就是输出在标准输出设备上。在头文件iostream中定义了控制符endl,endl代表回车换行操作,作用与“\n”相同。cincin是从键盘向内存流动的数据流。用“>>”运算符从输入设备键盘取得数据送到标准输入流cin中,然后再送到内存。“>>”常称为输入运算符。cin应与“>>”配合使用。例如:intm; //定义整型变量mfloatx; //定义浮点型变量xcin>>m>>x; //输入一个整数和一个实数可以从键盘输入:16168.98 m和x分别获得值16和168.98。例1.2cin与cout使用例如a。#include<iostream> //编译预处理命令usingnamespacestd; //使用命名空间stdintmain() //主函数main(){ cout<<"请输入你的姓名与年龄:"<<endl;//输出提示信息 charname[16]; //姓名 intage; //年龄
cin>>name; //输入姓名 cin>>age; //输入年龄 cout<<"你的姓名是:"<<name<<endl; //输出姓名 cout<<"你的年龄是:"<<age<<endl; //输出年龄
system("PAUSE"); //输出系统提示信息 return0; //返回值0,返回操作系统}对变量的定义放在执行语句之后。在C语言中要求变量的定义必须在执行语句之前。C++允许将变量的定义放在程序的任何位置。1.3.2const定义常量在C语言中常用#define命令来定义符号常量,例如:#definePI3.14159 //声明符号常量PI 在预编译时进行字符替换,把程序中出现的字符串PI全部替换为3.14159C++提供了用const定义常量的方法,例如:constfloatPI=3.14159; //定义常量PI 常量PI具有数据类型,在编译时要进行类型检查,占用存储单元,在程序运行期间它的值是固定的。注意:(1)程序中不能修改,只能读;(2)常量名不能放在赋值语句的左边,如:constfloatPI;PI=3.14159;(3)常量定义中初始化的值可以是常量表达式,如:constcharca[]=“Iamastudent.”;(4)定义常量的目的是:防止在程序中对该值的改变,减少程序出错的可能性,提高程序的可维护性;例1.3用const定义常量使用例如。#include<iostream> //编译预处理命令usingnamespacestd; //使用命名空间stdintmain() //主函数main(){ constfloatPI=3.14159; //定义常量PI floatr,s; //定义变量
cout<<"输入半径:"; //输入提示信息 cin>>r; //输入半径r s=PI*r*r; //计算面积 cout<<"面积:"<<s<<endl; //输出面积
system("PAUSE"); //输出系统提示信息 return0; //返回值0,返回操作系统}1.3.3函数重载问题:在C语言中,例如:intadd(intx,inty){ints;returns=x+y;}floatadd(floatx,floaty){ints;returns=x+y;}C++中,可以解决这个问题。C++允许在同一作用域内定义多个同名函数,但要求这些函数参数的类型或个数不相同。这个功能称为函数重载在同一个作用域内,函数名相同,参数的类型或个数不同的函数称为重载函数。重载函数的形参个数或类型必须至少有其中之一不同,不允许参数个数和类型都相同而只有返回值类型不同,这是由于系统无法从函数的调用形式判断与哪一个重载函数相匹配。//函数重载#include<iostream>//-------------------------------------intabs(inta){return(a>0)?a:-a;}//------------------------------------doubleabs(doublea){return(a>0)?a:-a;}//------------------------------------intmain(){std::cout<<abs(-10)<<"\n";std::cout<<abs(-12.23)<<"\n";}//=======================重载函数匹配只要参数个数不同,参数类型不同,参数顺序不同,函数就可以重载。然而,返回类型不同那么不允许函数重载。如:voidfunc(inta);//okvoidfunc(chara);//okvoidfunc(chara,intb);//okvoidfunc(inta,charb);//okcharfunc(inta);//error因为:func(23);//错:voidfunc(inta);还是charfunc(inta);匹配规那么:寻找一个严格匹配,如果找到了,就用那个函数;通过相容类型的隐式转换寻找一个匹配,如果找到了,就用那个函数通过用户定义的转换寻找一个匹配,假设能查出有唯一的一组转换,就用那个函数;例如:voidprint(double);voidprint(int);voidmain(){print(1);//匹配voidprint(int);规那么1print(1.0);//匹配voidprint(double);规那么1print(‘a’);//匹配voidprint(int);规那么2print(3.14159);//匹配voidprint(double);规那么2}在使用重载函数时需要注意下面三点:(1)编译器不以形式参数的标识符区分重载函数。例intmax(inta,intb);intmax(intx,inty);编译器认为这是同一个函数声明两次,编译时出错。(2)编译器不以函数类型区分重载函数。floatfun(intx,inty);intfun(intx,inty);如果函数名和形式参数表相同,只是函数类型不同,编译器同样认为它们是同一个函数声明两次,编译出错。(3)不应该将完成不同功能的函数写成重载函数,破坏程序的可读性。例1.4求2个数中最小值〔分别考虑整数、浮点数的情况〕。intMin(inta,intb) //求2个整数的最小值{ returna<b?a:b; //返回a,b的最小值 }floatMin(floata,floatb) //求2个浮点数的最小值{ returna<b?a:b; //返回a,b的最小值 }intmain() //主函数main(){ inta,b; //定义整型变量 floatx,y; //定义浮点型变量 cout<<"输入整数a,b:"; //输入提示 cin>>a>>b; //输入a,b cout<<a<<","<<b<<"的最小值为"<<Min(a,b)<<endl; //输出a,b的最小值,调用“intMin(inta,intb)” cout<<“输入浮点数x,y:"; //输入提示 cin>>x>>y; //输入x,y cout<<x<<","<<y<<"的最小值为"<<Min(x,y)<<endl; //输出x,y的最小值,调用“floatMin(floata,floatb)” system("PAUSE"); //调用库函数system(),输出系统提示信息 return0; //返回值0,返回操作系统}例1.5用重载函数实现分别求2个整数或3个整数中的最小者。intMin(inta,intb) //求2个整数的最小值{ returna<b?a:b; //返回a,b的最小值 }intMin(inta,intb,intc) //求3个整数的最小值{ intt=a<b?a:b; //a,b的最小值
t=t<c?t:c; //t,c的最小值 returnt; //返回a,b,c的最小值 }intmain() //主函数main(){ inta,b,c; //定义整型变量 cout<<"输入整数a,b,c:"; //输入提示 cin>>a>>b>>c; //输入a,b,c cout<<a<<“,”<<b<<“的最小值为”<<Min(a,b)<<endl; //输出a,b的最小值,调用“intMin(inta,intb)” cout<<a<<","<<b<<","<<c<<"的最小值为"<<Min(a,b,c) <<endl;//输出a,b,c的最小值,调用“intMin(inta,intb,intc)” system("PAUSE"); //输出系统提示信息 return0; //返回值0,返回操作系统}1.3.4有默认参数的函数在C语言中,在函数调用时形参从实参获得参数值,所以实参的个数应与形参相同。有时屡次调用同一函数时使用相同的实参值,C++允许给形参提供默认值,这样形参就不一定要从实参取值了。如有一函数声明: floatArea(floatr=1.6); //有默认值的函数声明 上面的函数声明指定参数r的默认值为1.6,如果在调用此函数时无实参,那么参数r的值为1.6,例如: s=Area(); //等价于Area(1.6)有默认参数的函数默认参数应在函数名第一次出现时指定。默认参数必须是函数参数表中最右边(尾部)的参数。例如: floatVolume(floatl=10.0,floatw=8.0,floath);//错误 floatVolume(floatl=10.0,floatw=8.0,floath=6.0);//正确 对于上面正确的函数声明,可采用如下形式的函数调用:v=Volume(10.1,8.2,6.8); //形参值全从实参得到,l=10.1,w=8.2,h=6.8v=Volume(10.1,8.2); //最后1个形参的值取默认值,l=10.1,w=8.2,h=6.0v=Volume(10.1); //最后2个形参的值取默认值,l=10.1,w=8.0,h=6.0v=Volume(); //形参的值全取默认值,l=10.0,w=8.0,h=6.0例1.6函数默认参数例如。voidShow(charstr1[],charstr2[]="",charstr3[]=""); //在声明函数时给出默认值intmain() //主函数main(){ Show("你好!"); //str1值取"你好!",str2与str3取默认值 Show("你好,","欢送学习C++!"); //str1值"你好,",str2取"欢送学习C++!",str3取默认值 Show("你好",",","欢送学习C++!"); //str1值"你好,",str2取",",str3取值"欢送学习C++!" system("PAUSE"); //输出系统提示信息 return0; //返回值0,返回操作系统}voidShow(charstr1[],charstr2[],charstr3[]){ cout<<str1<<str2<<str3<<endl; //输出str1,str2,str3}1.3.5引用的概念建立“引用”的作用是为一个变量起另一个名字,对一个变量的“引用”的所有操作,实际上都是对其所代表的〔原来的〕变量的操作设有一个变量x,要给它起一个别名y,可以这样写:floatx; //定义变量x float&y=x;//声明y是一个浮点型变量的引用变量,它被初始化为x 声明后,使用x或y代表同一变量。在上述声明中,&是“引用声明符”对变量声明一个引用,并不另开辟内存单元,x和y都代表相同一变量存储单元。引用的概念在声明一个引用时,必须同时使之初始化在函数中声明一个变量的引用后,在函数执行期间,该引用一直与其代表的变量相联系,不能再作为其他变量的别名。例如:inta,b; //定义整型变量a,bint&c=a; //使c成为变量a的引用〔别名〕int&c=b; //又使c成为变量b的引用〔别名〕是错误的例1.7变量的引用使用例如。intmain() //主函数main(){ inta=10; //定义变量 int&b=a; //b为a的引用,a与b代表相同变量存储单元 b=b+2; //b的值自加2,a与b的值都为12 cout<<"a的地址:"<<&a<<endl; //输出a的地址 cout<<"b的地址:"<<&b<<endl; //输出b的地址 cout<<"a的值:"<<a<<endl; //输出a的值 cout<<"b的值:"<<b<<endl; //输出a的值 system("PAUSE"); //输出系统提示信息 return0; //返回值0,返回操作系统}程序运行时屏幕输出参考如下:a的地址:0013FF7Cb的地址:0013FF7Ca的值:12b的值:12请按任意键继续...将引用作为函数参数C++增加“引用”的主要目的是利用它作为函数参数,以便扩充函数传递数据的功能。在C语言中,将变量名作为实参。这时将变量的值传递给形参。传递是单向的,在调用函数时,形参和实参不是同一个存储单元。在执行函数期间形参值发生变化并不传回给实参。例1.8以变量为实参不能实现交换变量的值的。voidSwap(inta,intb) //不能实现交换实参变量的值{ intt=a;a=b;b=t; //循环赋值交换a,b的值}intmain() //主函数main(){ intm=6,n=8; //定义整型变量 Swap(m,n); //调用函数Swap() cout<<m<<""<<n<<endl; //输出m,n的值 system("PAUSE"); //输出系统提示信息 return0; //返回值0,返回操作系统}在C程序中可以用指针传递变量地址的方法。使形参得到一个变量的地址,这时形参指针变量指向实参变量单元。例1.9用指针变量作形参,实现两个变量的值互换。voidSwap(int*p,int*q) //实现交换*p与*q的值{ intt=*p;*p=*q;*q=t; //循环赋值交换*p与*q的值}intmain() //主函数main(){ intm=6,n=8; //定义整型变量 Swap(&m,&n); //调用函数Swap() cout<<m<<""<<n<<endl; //输出m,n的值 system("PAUSE"); //输出系统提示信息 return0; //返回值0,返回操作系统}在C++中,把变量的引用作为函数形参,由于形参是实参的引用,也就是形参是实参的别名,这样对形参的操作等价于对实参的操作。例1.10利用引用形参实现交换两个变量的值。voidSwap(int&a,int&b) //实现交换实参变量的值{ intt=a;a=b;b=t; //循环赋值交换a与b的值}intmain() //主函数main(){ intm=6,n=8; //定义整型变量 Swap(m,n); //调用函数Swap() cout<<m<<""<<n<<endl; //输出m,n的值 system("PAUSE"); //输出系统提示信息 return0; //返回值0,返回操作系统}常引用常引用就是用const对引用加以限定,表示不允许改变该引用的值。例如:inta=6; //定义整型变量a,初值为6constint&b=a; //声明常引用,不允许改变b的值b=8; //改变常引用b的值,错误a=8; //改变a的值,正确常引用通常用作函数形参,这样能保证形参的值不被改变例1.11常引用形参例如。structPerson{ charname[20]; //姓名 charsex[3]; //性别};voidShow(constPerson&p){ cout<<"姓名:"<<<<endl; //输出姓名 cout<<"性别:"<<p.sex<<endl; //输出性别}intmain() //主函数main(){ Personp={"李倩","女"}; //定义结构体变量 Show(p); //输出p system("PAUSE"); //输出系统提示信息 return0; //返回值0,返回操作系统}在程序中,用结构名Person作为类型来定义变量p,在C语言中,不能用结构名来定义结构变量名,必须在结构名前加struct才能定义结构变量,即应采用如下形式定义:struct Personp={"李倩","女"};//定义结构体变量常引用可以用常量或表达式对常引用进行初始化,例如:inta=6; //定义变量constint&b=a+3;//正确,可以用表达式对常引用进行初始化int&c=a+3; //错误,对非常引用只能用变量进行初始化用表达式对常引用进行初始化时,系统将生成一个临时变量,用于存储表达式的值,引用是临时变量的别名。例如将“constint&b=a+3;”变换为:inttem=a+4; //将表达式的值存放在临时变量tem中constint&b=tem;//声明b是tem的引用(别名)1.3.6动态分配运算符newC++语言使用能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete来管理动态内存。例如:newint; //分配一个存放整数的空间,返回一个指向整型数据的指针newint(6); //分配一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度P2P出借项目融资咨询与风险评估合同2篇
- 2024年中国高级瓶口封套市场调查研究报告
- 2024年版短期租赁合同3篇
- 二零二五年度企业合同风险评估合同3篇
- 福建信息职业技术学院《机械制造工艺》2023-2024学年第一学期期末试卷
- 2024年砂石行业绿色生产技术改造合同3篇
- 2024年中国防爆电线市场调查研究报告
- 2024年中国镭射木质纪念品市场调查研究报告
- 2025版绿色环保办公设备更新及维护服务合同3篇
- 2025版人工智能居间采购合同居间行纪3篇
- 《ISO56001-2024创新管理体系 - 要求》之26:“9绩效评价-9.3管理评审”解读和应用指导材料(雷泽佳编制-2024)
- 2024至2030年中国除草剂行业市场前景预测及未来发展趋势研究报告
- 三年级上册乘法竖式计算练习200道及答案
- 2024-2030年中国泥炭市场深度调查研究报告
- 组建学校篮球队方案
- 政务服务中心物业服务投标方案【新版】(技术方案)
- (正式版)YS∕T 5040-2024 有色金属矿山工程项目可行性研究报告编制标准
- HJ 179-2018 石灰石石灰-石膏湿法烟气脱硫工程技术规范
- JT-T-617.7-2018危险货物道路运输规则第7部分:运输条件及作业要求
- 消弧产品规格标准化规定
- CTD申报资料撰写模板:模块三之3.2.S.3特性鉴定
评论
0/150
提交评论