《【精品】c++面向对象程序设计(可编辑.ppt》由会员分享,可在线阅读,更多相关《【精品】c++面向对象程序设计(可编辑.ppt(94页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C+面向对象程序设计C+C+面向对象程序设计面向对象程序设计面向对象程序设计面向对象程序设计第1章 C+的初步知识第1章 c+的初步知识2023/2/2主要内容主要内容1.1 从从C到到C+1.2 最简单的最简单的C+程序程序1.3 C+对对C的扩充的扩充1.4 C+程序的编写和实现程序的编写和实现3第1章 c+的初步知识2023/2/2 1972年年,贝贝 尔尔 实实 验验 室室 的的 Dennis Ritchie和和 Brian kernighan在在B语语言言的的基基础础上上,作作了了进进一一步步的的充充实实和和完完善善,设设计计出出了了C语语言言。当当时时,设设计计C语语言言是是为为了
2、了编编写写UNIX操操作作系系统统的的。以以后后,C语语言言经经过过多多次次改改进进,并并开开始始流流行行。C是是吸吸收收了了其其它它语语言言的的优优点点逐逐步步成成为为实实用用性性很很强强的的语语言言,而而C+是在是在C语语言的基言的基础础上上发发展和完善的。展和完善的。1.1 从从C到到C+4第1章 c+的初步知识2023/2/2C语言的主要特点是:语言的主要特点是:1、C语语言言是是一一种种结结构构化化的的程程序序设设计计语语言言,语语言言本本身身简简洁洁、使使用用灵灵活活方方便便。既既适适用用于于设设计计和和编编写写大大的的系系统统程程序序,又又适用于编写小的控制程序,也适用科学计算。
3、适用于编写小的控制程序,也适用科学计算。2、它它既既有有高高级级语语言言的的特特点点,又又具具有有汇汇编编语语言言的的特特点点。运运算算符符丰丰富富,除除了了提提供供对对数数据据的的算算术术逻逻辑辑运运算算外外,还还提提供供了了二二进进制制的的位位运运算算。并并且且也也提提供供了了灵灵活活的的数数据据结结构构。用用C语语言言编编写写的的程程序序表表述述灵灵活活方方便便,功功能能强强大大。用用C语语言言开开发发的的程程序序,其其结结构构性性好好,目目标标程程序序质质量量高高,程程序序执执行行效效率率高。高。1.1 从从C到到C+5第1章 c+的初步知识2023/2/2第1章 c+的初步知识202
4、3/2/2第1章 c+的初步知识2023/2/2 为为了了克克服服C语语言言本本身身存存在在的的缺缺点点,并并保保持持C语语言言简简洁洁、高高效效,与与汇汇编编语语言言接接近近的的特特点点,根根据据面面向向对对象象的的程程序序设设计计思思想想(OOP),1980年年,贝贝尔尔实实验验室室的的Bjarne Stroustrup博博士士及及其其同同事事对对C语语言言进进行行了了改改进进和和扩扩充充,并并把把类类的的概概念念引引入入到到C中中。并并在在1983年年由由Rick Maseitti提提议议正正式式命命名名为为C+(C Plus Plus)。后后来来,又又把把运运算算符符的的重重载载、引引
5、用用、虚虚函函数数等等功功能能加加入入到到C+中中,使使C+的功能日趋完善。的功能日趋完善。1.1 从从C到到C+8第1章 c+的初步知识2023/2/2AT&T发布的第一个发布的第一个C+编译系统是一个预编译编译系统是一个预编译器,它把器,它把C+代码转换成代码转换成C代码,然后再用代码,然后再用C编译编译系统生成目标代码。系统生成目标代码。1988 产生第一个产生第一个C+编译系统编译系统1989 C+2.0 类的多重继承类的多重继承1991 C+3.0 类的模板类的模板 C+4.0 异常处理、命名空间异常处理、命名空间1997 ANSI发布发布C+标准标准1.1 从从C到到C+9第1章
6、c+的初步知识2023/2/2C+既可以用于面向过程的结构化程序设计,也可既可以用于面向过程的结构化程序设计,也可用于面向对象的程序设计。用于面向对象的程序设计。C+对对C的增强体现在两个方面:的增强体现在两个方面:1.对原来的面向过程机制做了扩充。对原来的面向过程机制做了扩充。2.增加了面向对象的机制。增加了面向对象的机制。学习学习C+之后,既可以进行面向对象的程序设计,之后,既可以进行面向对象的程序设计,也可以进行面向过程的程序设计。也可以进行面向过程的程序设计。1.1 从从C到到C+10第1章 c+的初步知识2023/2/21.2 最简单的最简单的C+程序程序#include/用用cou
7、t输出时需要用此头文件输出时需要用此头文件using namespace std;/使用命名空间使用命名空间stdint main()coutThis is a C+program.n;/上面用上面用C+的方法输出一行的方法输出一行return 0;例例1.1输出一行字符输出一行字符“This is a C+program.”。11第1章 c+的初步知识2023/2/2(1)标准标准C+规定规定main函数必须声明为函数必须声明为int类型,如果类型,如果程序正常运行,向操作系统返回一个零值,否则返回程序正常运行,向操作系统返回一个零值,否则返回非零值,通常是非零值,通常是-1。(2)C+程序
8、中可以用程序中可以用/*/做注释,可以用做注释,可以用/做注释。做注释。前者可以做多行注释,后者只做单行注释。前者可以做多行注释,后者只做单行注释。(3)C+程序中常用程序中常用cout、cin进行输出输入,进行输出输入,cout是是C+定义的输出流对象,定义的输出流对象,是插入运算符。是插入运算符。1.2 最简单的最简单的C+程序程序 12第1章 c+的初步知识2023/2/2(4)使用使用cout、cin需要用头文件需要用头文件iostream,在程序开,在程序开始要用始要用#include声明包含的头文件。声明包含的头文件。(5)using namespace std;意思是使用命名空间
9、。意思是使用命名空间。C+标准库中的类和函数是在命名空间标准库中的类和函数是在命名空间std中声明的,中声明的,因此程序中如用因此程序中如用C+标准库中的有关内容(此时需标准库中的有关内容(此时需要用要用#include命令行),就要用命令行),就要用using namespace std;语句声明。语句声明。1.2 最简单的最简单的C+程序程序 13第1章 c+的初步知识2023/2/2#include /预处理命令预处理命令using namespace std;/使用命名空间使用命名空间stdint main()/主函数首部主函数首部 /函数体开始函数体开始int a,b,sum;/定义
10、变量定义变量cinab;/输入语句输入语句sum=a+b;/赋值语句赋值语句couta+b=sum”是提取运算是提取运算符,与符,与cin配合,其作用是从输入设备中提取数据配合,其作用是从输入设备中提取数据送到输入流送到输入流cin中。在程序执行时,键盘输入的第中。在程序执行时,键盘输入的第一个数据赋予一个数据赋予a,第二个数据赋予,第二个数据赋予b。cout语句中的语句中的endl是是C+控制符常数,作用是让光控制符常数,作用是让光标标换行换行。1.2 最简单的最简单的C+程序程序 15第1章 c+的初步知识2023/2/2#include using namespace std;int m
11、ain()int max(int x,int y);/对对max函数作声明函数作声明 int a,b,c;cinab;c=max(a,b);/调用调用max函数函数 coutmax=cy)z=x;else z=y;return(z);1.2 最简单的最简单的C+程序程序 17第1章 c+的初步知识2023/2/2例例1.4包含类的包含类的C+程序程序#include using namespace std;class Student /声明一个类,类名为声明一个类,类名为Student private:/以下为类中的私有部分以下为类中的私有部分 int num;/私有变量私有变量num int
12、 score;/私有变量私有变量score public:/以下为类中公用部分以下为类中公用部分 void setdata()/定义公用函数定义公用函数setdata cinnum;/输入输入num的值的值 cinscore;/输入输入score的值的值 void display()/定义公用函数定义公用函数display coutnum=numendl;/输出输出num的值的值 coutscore=scoreendl;/输出输出score的值的值;/类的声明结束类的声明结束1.2 最简单的最简单的C+程序程序 18第1章 c+的初步知识2023/2/2 Student stud1,stud2
13、;/定义定义stud1和和stud2为为Student类的变量,称为对象类的变量,称为对象int main()/主函数首部主函数首部stud1.setdata();/调用对象调用对象stud1的的setdata函数函数 stud2.setdata();/调用对象调用对象stud2的的setdata函数函数 stud1.display();/调用对象调用对象stud1的的display函数函数 stud2.display();/调用对象调用对象stud1的的display函数函数 return 0;1.2 最简单的最简单的C+程序程序 19第1章 c+的初步知识2023/2/2程序中声明一个被称
14、为类的类型程序中声明一个被称为类的类型Student。声明时。声明时要用关键字要用关键字class。C+类中可以包含两种成员即类中可以包含两种成员即数据数据(如变量如变量num、score)和函数和函数(如如setdata函数和函数和 display函数函数)。分别称为数据成员和成员函数。分别称为数据成员和成员函数。在在C+中将一组中将一组数据数据和访问这组数据的和访问这组数据的函数封装函数封装在一起,组成类。一个类是由一组数据,一组对在一起,组成类。一个类是由一组数据,一组对其访问的若干函数,以及数据和函数的访问属性其访问的若干函数,以及数据和函数的访问属性组成的。在前面程序中看到的组成的。
15、在前面程序中看到的private(私有)(私有)public(公有)保留字代表数据和函数的访问属性。(公有)保留字代表数据和函数的访问属性。1.2 最简单的最简单的C+程序程序 20第1章 c+的初步知识2023/2/2凡是指定为公有的数据和函数,既可由本类的函数凡是指定为公有的数据和函数,既可由本类的函数访问和调用,也可由其他函数或语句访问和调用;访问和调用,也可由其他函数或语句访问和调用;凡是指定为私有的数据和函数,通常只能由本类的凡是指定为私有的数据和函数,通常只能由本类的函数访问和调用。函数访问和调用。程序中程序中“Student stud1,stud2;”是一个定义语是一个定义语句,
16、定义两个句,定义两个Student 类型变量类型变量stud1和和stud2,Student 类与类与int一样是一样是C+的合法类型。的合法类型。1.2 最简单的最简单的C+程序程序 21第1章 c+的初步知识2023/2/2具有类类型的变量称为对象。具有类类型的变量称为对象。Student的对象的对象stud1,stud2具有同样的结构和特征。具有同样的结构和特征。在类外调用成员函数时必须在函数名前冠以类的名在类外调用成员函数时必须在函数名前冠以类的名称。称。1.2 最简单的最简单的C+程序程序 22第1章 c+的初步知识2023/2/2主函数中第一条语句输入学生主函数中第一条语句输入学生
17、1的学号和成绩,第的学号和成绩,第二条语句输入学生二条语句输入学生2的学号和成绩,第三条语句输的学号和成绩,第三条语句输出学生出学生1的学号和成绩,第四条语句输出学生的学号和成绩,第四条语句输出学生2的的学号和成绩。程序运行情况如下:学号和成绩。程序运行情况如下:1001 98.5 1002 76.5 num=1001Score=98.5num=1002Score=76.51.2 最简单的最简单的C+程序程序 23第1章 c+的初步知识2023/2/2为了与为了与C兼容,兼容,C+保留了保留了C语言中的一些规定,语言中的一些规定,例如头文件的文件名,以例如头文件的文件名,以C语言里头文件的扩展
18、名是语言里头文件的扩展名是.h,许多,许多C+编译系统保留了这种扩展名,近年推编译系统保留了这种扩展名,近年推出的出的C+编译系统新版本,推出了一批不带扩展名编译系统新版本,推出了一批不带扩展名的头文件如的头文件如iostream,string,cmath 等。为等。为了兼容了兼容C+仍允许使用带扩展名的头文件。由于仍允许使用带扩展名的头文件。由于C语言无命名空间,因此使用带扩展名的头文件时不用语言无命名空间,因此使用带扩展名的头文件时不用using namespace std。1.2 最简单的最简单的C+程序程序 24第1章 c+的初步知识2023/2/21.3 C+对对C的扩充的扩充 C+
19、既可用于面向过程的程序设计,也可用于面既可用于面向过程的程序设计,也可用于面向对象程序设计。向对象程序设计。C+继承了继承了C语言提供的绝大部语言提供的绝大部分功能和语法规定,并在此基础上作了扩充。分功能和语法规定,并在此基础上作了扩充。25第1章 c+的初步知识2023/2/21.3.1 C+的输入和输出的输入和输出1.3.2 用用const 定义常变量定义常变量1.3.3 函数原型声明函数原型声明1.3.4 函数的重载函数的重载1.3.5 函数模板函数模板1.3.6 有默认参数的函数有默认参数的函数1.3.7 变量的引用变量的引用1.3.8 内置函数内置函数1.3.9 作用域运算符作用域运
20、算符1.3.10 字符串变量字符串变量1.3.11 动态分配动态分配/回收内存运算符回收内存运算符1.3 C+对对C的扩充的扩充 26第1章 c+的初步知识2023/2/21.3.1 C+的输入输出的输入输出 C+为了方便使用,除了可以利用为了方便使用,除了可以利用printf和和scanf函数进行输入和输出外,还增加了标准输入函数进行输入和输出外,还增加了标准输入流输出流流输出流cin和和cout。它们是在头文件。它们是在头文件iostream中定义的,标准流是不需要打开文件和关闭文件就中定义的,标准流是不需要打开文件和关闭文件就能直接操作的流式文件,在此标准输入流是指从键能直接操作的流式文
21、件,在此标准输入流是指从键盘上输入的数据,标准输出流是指向屏幕输出的数盘上输入的数据,标准输出流是指向屏幕输出的数据流。据流。27第1章 c+的初步知识2023/2/21.用用cout进行输出进行输出格式:格式:cout 表达式表达式1表达式表达式2功能:由左向右逐个计算表达式的值,将其插入到功能:由左向右逐个计算表达式的值,将其插入到输出流输出流cout中。中。cout 必须与输出运算符必须与输出运算符一起使用,每个一起使用,每个后后跟一个表达式,跟一个表达式,运算符的结合方向是从左向右,运算符的结合方向是从左向右,所以各个表达式的值按从左到右的顺序插入到输出所以各个表达式的值按从左到右的顺
22、序插入到输出流中。流中。28第1章 c+的初步知识2023/2/2For (k=1;k =3;k+)cout“k=“kendlendl是是C+输出流的常数,在头文件输出流的常数,在头文件iostream中定义,代表让光标换行。在中定义,代表让光标换行。在C+中也可以用中也可以用”n”控制光标换行。所以输出语句也可写成:控制光标换行。所以输出语句也可写成:cout“k=“k变量变量1 变量变量2 是是C+的提取运算符,表示从标准输入设备取的提取运算符,表示从标准输入设备取得数据,赋予其后的变量。得数据,赋予其后的变量。从键盘输入数值数据时,两个数据之间用空格分隔从键盘输入数值数据时,两个数据之间
23、用空格分隔或用回车分隔。或用回车分隔。30第1章 c+的初步知识2023/2/2int a;float bcinab;从键盘输入从键盘输入20 32.45 31第1章 c+的初步知识2023/2/2例例1.5 cin和和cout的使用的使用#include using namespace std;int main()coutplease enter your name and age:name;cinage;coutyour name is nameendl;coutyour age is ageendl;return 0;32第1章 c+的初步知识2023/2/21.3.2用用const定义
24、常变量定义常变量 格式:格式:const 类型类型 变量名变量名=常数常数例:例:const float PI=3.14159;33第1章 c+的初步知识2023/2/21.3.3函数原型声明函数原型声明 C+规定,如果函数调用在函数定义之前,要求规定,如果函数调用在函数定义之前,要求在调用之前在调用之前必须必须声明该函数的原型。声明该函数的原型。格式:函数类型格式:函数类型 函数名(形参表)函数名(形参表);形参表中形参可以只写类型。形参表中形参可以只写类型。例:例:int max(int x,int y);或或 int max(int,int);其实其实C+编译时,只检查参数的数据类型。编
25、译时,只检查参数的数据类型。34第1章 c+的初步知识2023/2/21.3.4函数的重载函数的重载 C+允许在同一个域中用一个函数名定义多个函允许在同一个域中用一个函数名定义多个函数,这些函数的参数个数、参数类型不相同。数,这些函数的参数个数、参数类型不相同。用一用一个函数名实现不同的功能,就是函数的重载个函数名实现不同的功能,就是函数的重载。例例1.6 设计程序计算三个数中的大数设计程序计算三个数中的大数35第1章 c+的初步知识2023/2/2#include using namespace std;int max(int a,int b,int c)if(ba)a=b;if(ca)a=
26、c;return a;float max(float a,float b,float c)if(ba)a=b;if(ca)a=c;return a;long max(long a,long b,long c)if(ba)a=b;if(ca)a=c;return a;36第1章 c+的初步知识2023/2/2int main()int a,b,c;float d,e,f;long g,h,i;cinabc;cindef;cinghi;int m;m=max(a,b,c);/函数值为整型函数值为整型cout max_i=mendl;float n;n=max(d,e,f);/函数值为实型函数值为实
27、型coutmax_f=nendl;long int p;p=max(g,h,i);/函数值为长整型函数值为长整型coutmax_l=pendl;return 0;37第1章 c+的初步知识2023/2/2例例 1.7下面的例子说明用函数重载设计参数个数不同的下面的例子说明用函数重载设计参数个数不同的函数,用一个函数名求两个整数或三个整数中的函数,用一个函数名求两个整数或三个整数中的最大数。最大数。#include using namespace std;int max(int a,int b,int c)/求求3个整数中的最大者个整数中的最大者if(ba)a=b;if(ca)a=c;retur
28、n a;38第1章 c+的初步知识2023/2/2int max(int a,int b)/求两个整数中的最大者求两个整数中的最大者if(ab)return a;else return b;int main()int a=7,b=-4,c=9;coutmax(a,b,c)endl;/输出输出3个整数中的最大者个整数中的最大者 coutmax(a,b)endl;/输出两个整数中的最大者输出两个整数中的最大者 return 0;39第1章 c+的初步知识2023/2/2注意:不允许函数参数个数、参数类型都相同,只注意:不允许函数参数个数、参数类型都相同,只是函数返回值不同。因为系统无法从调用形式上
29、判是函数返回值不同。因为系统无法从调用形式上判断调用与哪个函数相匹配。断调用与哪个函数相匹配。40第1章 c+的初步知识2023/2/21.3.5函数模板函数模板 如果两个函数的参数个数相同,函数的行为相同如果两个函数的参数个数相同,函数的行为相同(做同样的事),只是函数和参数的数据类型不同,(做同样的事),只是函数和参数的数据类型不同,如果用函数重载的话,编写的函数代码是相同的,如果用函数重载的话,编写的函数代码是相同的,为了节省时间,为了节省时间,C+提供了函数模板功能。提供了函数模板功能。格式:格式:template 函数定义(函数的类型和参数的类型用声明的标识函数定义(函数的类型和参数
30、的类型用声明的标识符表示)符表示)41第1章 c+的初步知识2023/2/2template 是关键字,含义是模板是关键字,含义是模板typename 是关键字,表示其后的标识符代表类型是关键字,表示其后的标识符代表类型参数,调用时根据实参的类型确定形参的类型。参数,调用时根据实参的类型确定形参的类型。所谓函数模板,是建立一个通用函数,不指定函数所谓函数模板,是建立一个通用函数,不指定函数类型和参数类型,而用一个虚拟的类型表示。在调类型和参数类型,而用一个虚拟的类型表示。在调用函数时,用实参的类型取代模板中的虚拟类型。用函数时,用实参的类型取代模板中的虚拟类型。例例1.8 为计为计算两个数中的
31、大数定算两个数中的大数定义义函数模板函数模板42第1章 c+的初步知识2023/2/2#include using namespace std;template T max(T a,T b,T c)/用虚拟类型用虚拟类型T表示类型表示类型if(ba)a=b;if(ca)a=c;return a;43第1章 c+的初步知识2023/2/2int main()int i1=8,i2=5,i3=6,i;double d1=56.9,d2=90.765,d3=43.1,d;long g1=67843,g2=-456,g3=78123,g;i=max(i1,i2,i3);d=max(d1,d2,d3);
32、g=max(g1,g2,g3);couti_max=iendl;coutd_max=dendl;coutg_max=gendl;return 0;44第1章 c+的初步知识2023/2/2从程序中看到,此问题用函数模板比用函数重载更从程序中看到,此问题用函数模板比用函数重载更方便。注意,函数模板只适用于函数参数的方便。注意,函数模板只适用于函数参数的个数相个数相同而类型不同同而类型不同,并且函数体相同的情况并且函数体相同的情况,如果函数,如果函数的参数个数不同,则不能用函数模板。的参数个数不同,则不能用函数模板。45第1章 c+的初步知识2023/2/21.3.6有默认参数的函数有默认参数的函
33、数 C+允许为函数的参数设置默认值,这时调用函数时,允许为函数的参数设置默认值,这时调用函数时,如果如果没有实参,就以默认值作为实参值没有实参,就以默认值作为实参值。格式:格式:形参类型形参类型 形参变量名形参变量名=常数常数功能:调用函数时,如果没有实参,就以常数作功能:调用函数时,如果没有实参,就以常数作为该形参的值为该形参的值;如果有实参,仍以实参的值作为该如果有实参,仍以实参的值作为该形参的值形参的值。注意:注意:有默认值的形参必须放在形参表的右边有默认值的形参必须放在形参表的右边,不允许无默认参数值和有默认参数值的形参交错不允许无默认参数值和有默认参数值的形参交错排列。排列。46第1
34、章 c+的初步知识2023/2/2例:编写计算圆柱体体积函数例:编写计算圆柱体体积函数float volume(float h,float r=12.5)调用可以采用以下任何一种形式:调用可以采用以下任何一种形式:volume(45.6);volume(32.5,10.5);函数参数结合从左到右,用第一种方式调用时,函数参数结合从左到右,用第一种方式调用时,只有一个实参,圆半径的值取默认值只有一个实参,圆半径的值取默认值12.5,用第,用第二种方式调用时,有两个实参,圆半径的值取实二种方式调用时,有两个实参,圆半径的值取实参的值参的值10.5。47第1章 c+的初步知识2023/2/2注意:注
35、意:一、如果用函数原型声明,只要在函数原型声明中一、如果用函数原型声明,只要在函数原型声明中定义形参的默认值即可。定义形参的默认值即可。二、一个函数名不能同时用于重载函数和带默认形二、一个函数名不能同时用于重载函数和带默认形参值的函数。当调用函数时,如少写一个参数,系参值的函数。当调用函数时,如少写一个参数,系统无法判断是利用重载函数还是利用带默认参数值统无法判断是利用重载函数还是利用带默认参数值的函数,出现二义性。的函数,出现二义性。48第1章 c+的初步知识2023/2/2例如将例如将例例1.7中的第三行改为中的第三行改为int max(int a,int b,int c=100);此时此
36、时 max是重载函数,又带默认参数值,如果出是重载函数,又带默认参数值,如果出现现max(5,23)形式的调用,编译系统无法断定形式的调用,编译系统无法断定调用哪个函数,于是发出编译出错的信息。调用哪个函数,于是发出编译出错的信息。49第1章 c+的初步知识2023/2/21.3.7变量的引用变量的引用 C+提供了为变量取别名的功能,这就是变量的提供了为变量取别名的功能,这就是变量的引用。引用。格式:格式:类型类型&变量变量1=变量变量2变量变量2是在此之前已经定义过的变量,且与是在此之前已经定义过的变量,且与变量变量1的类型相同的类型相同。这里为变量。这里为变量2定义一个别名变量定义一个别名
37、变量1,在程序里变量在程序里变量1和变量和变量2 就是就是同一个变量同一个变量。注意:两个变量不能用同一个别名。注意:两个变量不能用同一个别名。50第1章 c+的初步知识2023/2/2例:例:int a=3,b=4;int&c=a;/c是是a 的别名的别名 int&c=b;/错误的用法错误的用法一个变量可以有多个别名一个变量可以有多个别名例:例:int a=3;int&b=a;int&c=b;变量变量a 有两个别名有两个别名b和和c。51第1章 c+的初步知识2023/2/2#include using namespace std;int main()int a=10;int&b=a;/声明
38、声明b是是a的引用的引用 a=a*a;couta bendl;b=b/5;coutb aendl;return 0;52第1章 c+的初步知识2023/2/2图1.1程序运行结果如下:100 10020 2053第1章 c+的初步知识2023/2/2将引用作为函数参数将引用作为函数参数 C+除了可以用普通变量、指针变量做形参外,除了可以用普通变量、指针变量做形参外,还可以用引用变量做形参。还可以用引用变量做形参。(1)用普通变量做形参)用普通变量做形参 这时传递的是实参的这时传递的是实参的值值,在函数内形参与实参是,在函数内形参与实参是两个不同的内存单元,对形参的修改不会影响两个不同的内存单元
39、,对形参的修改不会影响实参的值。实参的值。54第1章 c+的初步知识2023/2/2#include using namespace std;void swap(int a,int b)int temp;temp=a;a=b;b=temp;/实现实现a和和b的值互换的值互换55第1章 c+的初步知识2023/2/2int main()int i=3,j=5;swap(i,j);couti,jendl;/i和和j的值未互换的值未互换 return 0;例例1.10无法实现两个变量的值互换的程序无法实现两个变量的值互换的程序56第1章 c+的初步知识2023/2/2图1.257第1章 c+的初步知
40、识2023/2/2(2)用指针变量做形参)用指针变量做形参 C语言还允许用指针变量做形参,这时传递的语言还允许用指针变量做形参,这时传递的是实参变量的是实参变量的地址地址(指针),在函数内利用这个(指针),在函数内利用这个指针访问实参变量。指针访问实参变量。例例1.11用指针变量做形参,实现两个变量值的交换。用指针变量做形参,实现两个变量值的交换。58第1章 c+的初步知识2023/2/2#include using namespace std;void swap(int*p1,int*p2)int temp;temp=*p1;*p1=*p2;*p2=temp;59第1章 c+的初步知识202
41、3/2/2int main()int i=3,j=5;swap(&i,&j);couti,jendl;return 0;60第1章 c+的初步知识2023/2/2图1.3 61第1章 c+的初步知识2023/2/2(3)用引用变量做形参)用引用变量做形参用指针变量做形参,它将实参变量的地址传递给形用指针变量做形参,它将实参变量的地址传递给形参,在函数内用参,在函数内用“*指针变量指针变量”的方式访问实参变的方式访问实参变量。我们知道引用变量是变量的别名,在调用函数量。我们知道引用变量是变量的别名,在调用函数时,用引用变量做的时,用引用变量做的形参就成了实参变量的别名形参就成了实参变量的别名,在
42、函数中用的形参名就是实参的别名,这样比用指在函数中用的形参名就是实参的别名,这样比用指针变量更直观、更方便。针变量更直观、更方便。62第1章 c+的初步知识2023/2/2例例1.12利用引用变量实现两个变量值的交换利用引用变量实现两个变量值的交换#include using namespace std;void swap(int&a,int&b)int temp;temp=a;a=b;b=temp;63第1章 c+的初步知识2023/2/2int main()int i=3,j=5;swap(i,j);couti=i j=jendl;return 0;64第1章 c+的初步知识2023/2/
43、2图1.4 65第1章 c+的初步知识2023/2/2对引用的进一步说明对引用的进一步说明(1)引用变量都具有非)引用变量都具有非void类型类型(2)不能建立引用的数组)不能建立引用的数组 (3)可以将变量的引用的地址赋给一个指针,则可以将变量的引用的地址赋给一个指针,则指针指向原来的变量。指针指向原来的变量。int a=3;int&b=a;int*p=&b;/相当于相当于p指向指向a66第1章 c+的初步知识2023/2/2(4)可以建立指针变量的引用变量)可以建立指针变量的引用变量例:例:int i;int *p=&i;int*&pt=p;/pt是是p的别名变量,同的别名变量,同时也是指
44、针变量时也是指针变量(5)可以建立常引用变量,不允许修改常引用变)可以建立常引用变量,不允许修改常引用变量的值量的值例:例:int i;const int&a=i;a=3;/错误的用法错误的用法 i =8;/i 不是常变量,可以修改不是常变量,可以修改67第1章 c+的初步知识2023/2/2(6)可以用常量或表达式对引用进行初始化,但可以用常量或表达式对引用进行初始化,但此时必须用此时必须用const作声明。作声明。例:例:int i=5;const&a=i+3;68第1章 c+的初步知识2023/2/21.3.8内置函数内置函数 C+提供了一种机制,在编译时,将所调用的提供了一种机制,在编
45、译时,将所调用的函数的代码嵌入到调用函数代码中,在执行函数函数的代码嵌入到调用函数代码中,在执行函数时省去了调用环节,提高了函数的执行速度。这时省去了调用环节,提高了函数的执行速度。这种机制称为内置函数,有的书称内联函数。种机制称为内置函数,有的书称内联函数。格式:格式:inline 函数类型函数类型 函数名函数名(形参表形参表)函数体函数体 inline 是是C+的关键字,在编译时,编译程的关键字,在编译时,编译程序会把这个函数嵌入到调用函数的函数体中序会把这个函数嵌入到调用函数的函数体中调用格式:调用格式:函数名(实参表)函数名(实参表)69第1章 c+的初步知识2023/2/2例例1.1
46、3计算三个整数中的大数计算三个整数中的大数#include using namespace std;inline int max(int a,int b,int c)/这是一个内置函数,这是一个内置函数,/求求3个整数中的最大者个整数中的最大者if(ba)a=b;if(ca)a=c;return a;int main()int i=7,j=10,k=25,m;m=max(i,j,k);coutmax=ma)a=b;if(ca)a=c;m=a;71第1章 c+的初步知识2023/2/2例例1.15用内置函数计算平方根用内置函数计算平方根#include using namespace std;i
47、nline int power(int x)/定义内置函数定义内置函数return x*x;int main()coutpower(2)endl;coutpower(1+1)endl;return 0;72第1章 c+的初步知识2023/2/2编译程序遇见内置函数编译程序遇见内置函数power时,先求出函数的实时,先求出函数的实参值(参值(1+1=2),然后用),然后用power函数体代替函数调函数体代替函数调用,调用语句变成:用,调用语句变成:cout2*2endl;cout2*2endl;运行结果是运行结果是44 73第1章 c+的初步知识2023/2/2使用内置函数可以节省程序的运行时间
48、,但增加了使用内置函数可以节省程序的运行时间,但增加了目标程序的长度。所以在使用时要衡量时间和空间目标程序的长度。所以在使用时要衡量时间和空间的得失。的得失。74第1章 c+的初步知识2023/2/21.3.9作用域运算符作用域运算符 并不是所有的变量在程序运行的时时刻刻都是可见的。并不是所有的变量在程序运行的时时刻刻都是可见的。有的变量在整个程序运行期间都是可见的,称它们为有的变量在整个程序运行期间都是可见的,称它们为全全局变量局变量;有的变量只能在一个函数中可知,被称为;有的变量只能在一个函数中可知,被称为局部局部变量变量。每个变量都有其有效的每个变量都有其有效的作用域作用域,程序只能在变
49、量的有效,程序只能在变量的有效的作用域内使用变量,不能直接使用其他域中的变量。的作用域内使用变量,不能直接使用其他域中的变量。75第1章 c+的初步知识2023/2/2程序的内存区域程序的内存区域程序的内存空间代码区全局数据区堆区栈区程序中各个函数的代码程序中全局数据和静态数据程序中的动态数据程序中各函数内的数据76第1章 c+的初步知识2023/2/2例例1.16局部变量和全局变量同名局部变量和全局变量同名#include using namespace std;float a=13.5;int main()int a=5;coutaendl;return 0;77第1章 c+的初步知识20
50、23/2/2程序中有两个变量程序中有两个变量a,一个是全局变量,另一个是,一个是全局变量,另一个是main函数的局部变量,根据局部变量会屏蔽同名函数的局部变量,根据局部变量会屏蔽同名的全局变量规则,在函数中出现的变量的全局变量规则,在函数中出现的变量a是局部变是局部变量,因此输出的值是量,因此输出的值是5,而不是,而不是13.5,为了在函数为了在函数中访问全局变量中访问全局变量C+提供了提供了作用域作用域运算符运算符:,可,可以用来指定要访问的作用域,可以把以用来指定要访问的作用域,可以把main函数改函数改写成写成78第1章 c+的初步知识2023/2/2#include using nam