《面向对象程序设计C++》课件1第2章 面向过程程序设计概述.ppt

上传人(卖家):momomo 文档编号:7280510 上传时间:2023-11-12 格式:PPT 页数:155 大小:2.22MB
下载 相关 举报
《面向对象程序设计C++》课件1第2章 面向过程程序设计概述.ppt_第1页
第1页 / 共155页
《面向对象程序设计C++》课件1第2章 面向过程程序设计概述.ppt_第2页
第2页 / 共155页
《面向对象程序设计C++》课件1第2章 面向过程程序设计概述.ppt_第3页
第3页 / 共155页
《面向对象程序设计C++》课件1第2章 面向过程程序设计概述.ppt_第4页
第4页 / 共155页
《面向对象程序设计C++》课件1第2章 面向过程程序设计概述.ppt_第5页
第5页 / 共155页
点击查看更多>>
资源描述

1、2023-11-121 1第第2章章 面向过程程序设计概述面向过程程序设计概述本章学习要点本章学习要点从C语言到C+的发展历程简单的C+程序C+在面向过程程序设计方面在面向过程程序设计方面对C语言的扩充C+的输入输出、数据类型、常变量及指针C+的引用、函数、名字空间、字符串变量、复数变量C+程序的编写和实现2023-11-122 2本章学习目标本章学习目标了解从C语言到C+的发展历程对简单的C+程序有整体的感性认识掌握C+在面向过程程序设计方面在面向过程程序设计方面对C的扩充掌握C+的输入输出、数据类型、常变量及指针掌握C+的引用、函数、名字空间、字符串变量、复数变量熟悉C+程序的编写和实现流

2、程第第2章章 面向过程程序设计概述面向过程程序设计概述2023-11-123 32.1 从C语言到C+C+3.0C+2.0C+1.0带类的带类的CCC+4.0ANSI C+89年,增加类的多继承91年,增加模板增加异常处理、名字空间、运行时类型识别97年,美国C+标准正式发布2023-11-124 4v下面看几个简单的下面看几个简单的C+程序程序【例2-1】在屏幕上输出一行字符“Welcome to C+!”。#include /包含头文件命令using namespace std;/使用名字空间stdint main()coutWelcome to C+!endl;/输出字符串到屏幕 ret

3、urn 0;/main函数返回0至操作系统2.2 简单简单C+程序程序标准C+程序和C程序的不同:main函数的返回值为整型 注释符:/使用cout输出 包含头文件iostream名字空间注意【例2-2】通过函数求两个整数a和b中的较大者。#include /包含头文件命令using namespace std;/使用名字空间stdint myMax(int x,int y)return xy?x:y;/求两数中的大者函数Maxint main()int a,b;/定义两个整型变量a和b coutPlease enter two integers:ab;/等待用户从键盘输入数据 coutThe

4、 bigger is myMax(a,b)endl;return 0;2023-11-125 52.2 简单简单C+程序程序C+的函数和C语言的函数非常相似 函数的使用仍然需要先声明后使用。如果函数定义在函数调用之后,则必须在前面声明函数原型注意2023-11-126 6#include /包含头文件命令using namespace std;/使用名字空间stdint main()int a,b;/定义两个整型变量a和b coutPlease enter two integers:ab;/等待用户从键盘输入数据 int myMax(int x,int y);/Max函数原型声明 coutTh

5、e bigger is myMax(a,b)y?x:y;2.2 简单简单C+程序程序变量可以在程序的变量可以在程序的任何地方定义,但任何地方定义,但要在使用前要在使用前2023-11-127 72.2 简单简单C+程序程序【例例2-3】声明一个关于人的类声明一个关于人的类PersonPerson,人的信息包括,人的信息包括姓名、性别、年龄,程序运行后,人可以输入自己的姓名、性别、年龄,程序运行后,人可以输入自己的信息,也可以显示自己的信息。信息,也可以显示自己的信息。#include /包含头文件命令 using namespace std;/使用名字空间std class Person in

6、t main();return 0;2023-11-128 82.2 简单简单C+程序程序class Person /类的声明public:/以下为类的公用成员函数void setInfo()/公用成员函数setInfo coutnamesexage;void show()/公用成员函数show cout name:name;cout sex:sex;cout age:ageendl;private:/以下为类的私有数据成员char name20;/私有数据成员namechar sex2;/私有数据成员sexint age;/私有数据成员age;/类声明结束,此处必须有分号 2023-11-1

7、29 92.2 简单简单C+程序程序int main()/main函数 /定义Person类的两个对象person1,person2 Person person1,person2;person1.setInfo();/对象person1信息输入 person2.setInfo();/对象person2信息输入 person1.show();/对象person1信息输出 person2.show();/对象person2信息输出 return 0;2023-11-121010注意:注意:类的声明和对象的定义的语法形式。类中的成员分为数据成员和成员函数,成员的可见性分为 3种:公用、私有、受保护。

8、类的概念的理解:类是一种用户自定义数据类型,它是不占用实际存储空间的。对象的理解:对象是类类型的变量,系统会为对象分配内存空间。2.2 简单简单C+程序程序2023-11-1211112.3 C+对对C语言的扩充语言的扩充v在输入输出方面的扩充在输入输出方面的扩充v对数据类型的扩充对数据类型的扩充v常变量常变量v在指针方面的扩充在指针方面的扩充v引用的概念引用的概念v在函数方面的扩充在函数方面的扩充v名字空间的概念名字空间的概念v字符串变量字符串变量v复数变量复数变量本章重点本章重点2023-11-1212122.3.1 C+的输入输出的输入输出vC语言输入输出的实现语言输入输出的实现 通过输

9、入输出库函数实现通过输入输出库函数实现 C语言的输入输出存在着格式复杂、无法保证安语言的输入输出存在着格式复杂、无法保证安全性、无法对自定义类型整体输入输出等缺点全性、无法对自定义类型整体输入输出等缺点v C+对对C输入输出的扩充输入输出的扩充 C+的输入的输入/输出(输出(I/O)流类库)流类库“流流”的思想的思想 cout、cin对象对象,运算符运算符2023-11-1213132.3.2 C+对对C语言数据语言数据类型的扩展类型的扩展新增数新增数据类型据类型数据类型数据类型基本类型基本类型构造类型构造类型指针类型指针类型引用类型引用类型空类型空类型(void)字符型字符型(char、wc

10、har_t、char16_t、char32_t)(signed char、short、int、long、long long)整型整型单精度型单精度型(float)双精度型双精度型(double)长双精度型长双精度型(long double)浮点型浮点型枚举类型枚举类型数组类型数组类型结构体类型结构体类型共用体类型共用体类型类类型类类型布尔型布尔型(bool)有符号整型有符号整型无符号整型无符号整型(unsigned char、unsigned short、unsigned int、unsigned long、unsigned long long)功能进行功能进行了扩充了扩充2023-11-12

11、1414C+对对C语言的语言的结构体结构体、共用体共用体、枚举枚举等自定等自定义数据类型做了扩充。义数据类型做了扩充。2.3.2 C+对对C语言数据类型的扩展语言数据类型的扩展2023-11-121515struct Student int num;char name20;char sex;void display()coutnum=numendl;coutname=nameendl;coutsex=sexendl;2.3.2 C+对对C语言数据类型的扩展语言数据类型的扩展2023-11-121616struct Student private:int num;char name20;char

12、 sex;public:void display()coutnum=numendl;coutname=nameendl;coutsex=sexendl;StudentStudent stud1,stud2;stud1,stud2;2.3.2 C+对对C语言数据类型的扩展语言数据类型的扩展2023-11-121717在在C+中用中用结构体类型名结构体类型名、共用体类型名共用体类型名、枚举类型名枚举类型名定义变量时定义变量时,不必不必在类型名前在类型名前加加上上前缀前缀struct、union、enum。2.3.2 C+对对C语言数据类型的扩展语言数据类型的扩展2023-11-121818stru

13、ct student char ID15;char name20;int age;union xy int x;char y;enum color black,white,redstudent stud;xy x1;color col;struct student stud;unoin xy x1;enum color col;C语语言言C+2.3.2 C+对对C语言数据类型的扩展语言数据类型的扩展2023-11-1219192.3.3 常变量常变量v直接常量和符号常量直接常量和符号常量v使用符号常量需要注意的问题:使用符号常量需要注意的问题:运行时不分配内存单元运行时不分配内存单元 符号常量

14、没有类型,在编译时不进行类型符号常量没有类型,在编译时不进行类型检查检查 注意替换后的表达式和预想的表达式是否注意替换后的表达式和预想的表达式是否一致一致 int x=1,y=2;#define PI 3.14159#define R x+y coutPI*R*Rendl;输出语句输出的并不是输出语句输出的并不是 3.14159*(x+y)*(x+y),而是而是 3.14159*x+y*x+y。2023-11-1220202.3.3 常变量常变量v为了使常量也能像变量那样进行类型检为了使常量也能像变量那样进行类型检查,查,C+提供了用提供了用const定义常变量的方定义常变量的方法法v定义常变

15、量的语法:定义常变量的语法:const float PI=3.14159;注意:注意:常变量要在定义的同时进行初始化,常变量要在定义的同时进行初始化,可以是具体的数值,也可以是表达式。可以是具体的数值,也可以是表达式。2023-11-1221212.3.3 常变量常变量vC+提供的变量初始化的几种形式。例如,想定义整型提供的变量初始化的几种形式。例如,想定义整型变量变量x并初始化为并初始化为1,以下的,以下的4条语句都可以实现:条语句都可以实现:(1)int x=1;(2)int x=1;(3)int x(1);(4)int x1;v其中,花括号形式的列表初始化是其中,花括号形式的列表初始化是

16、C+11标准新引入的标准新引入的,并得到全面应用。当用于内置类型的变量时,这种初,并得到全面应用。当用于内置类型的变量时,这种初始化形式有一个重要特点:如果初始值存在丢失信息的始化形式有一个重要特点:如果初始值存在丢失信息的风险,编译器将报错。风险,编译器将报错。vlong double ld=3.1415926536;vint ald,b=ld;/错误:转换未执行,因为存在丢失信息的风险vint c(ld),d=ld;/正确:转换执行,且确实丢失了部分值2023-11-122222【例2-4】利用常变量计算圆的面积。#include using namespace std;int main(

17、)const float PI3.14159;/定义常变量 float radius0;coutradius;coutThe area of circle is:PI*radius*radiusendl;return 0;2.3.3 常变量常变量注意const的位置,一般见到的const的位置可能在类型的前面,但是const也可以在变量名前面,并且两者的含义完全相同。注意 float const PI 3.14159;/定义常变量2023-11-1223232.3.3 常变量常变量v由于定义常变量的关键字为由于定义常变量的关键字为const,故,故常变量常变量也被称为也被称为const变量变量

18、。可以在程序的任何位置定义常变量。需要。可以在程序的任何位置定义常变量。需要注意的是,常变量在定义时必须进行初始化,可以用值注意的是,常变量在定义时必须进行初始化,可以用值对其初始化,也可以使用表达式。使用表达式时,系统对其初始化,也可以使用表达式。使用表达式时,系统会先计算出表达式的值,然后再将值赋给常变量。会先计算出表达式的值,然后再将值赋给常变量。vconst int i;/错误:未对i初始化vconst int j10;/正确:编译时初始化,j也称为编译期常变量vconst int k get_size();/正确:运行时初始化,k也称为运行期常变量,get_size()为自定义函数v

19、const char chello;/错误:invalid conversion from const char*to char 2023-11-1224242.3.3 常变量常变量vconst与与constexpr:关键字关键字constexpr于于C+11中引入并于中引入并于 C+14中得到改善中得到改善。它表示常量表达式(指值不会改变并且在编译过程就。它表示常量表达式(指值不会改变并且在编译过程就能得到计算结果的表达式)。能得到计算结果的表达式)。与与const相同,它可应用于变量,任何代码试图修改该值相同,它可应用于变量,任何代码试图修改该值,均将引发编译器错误。,均将引发编译器错误。

20、与与const不同,不同,constexpr也可应用于函数和类构造函数也可应用于函数和类构造函数(分别在(分别在2.3.6节和节和3.12节介绍)。节介绍)。2023-11-1225252.3.3 常变量常变量v用用constexpr定义变量的方法:定义变量的方法:vconstexpr float x42.0;/42.0是常量表达式是常量表达式vconstexpr float y108;/108是常量表达式是常量表达式vconstexpr int size size();/只有当只有当size是一个是一个constexpr函数时,才是一条正确的声明语句函数时,才是一条正确的声明语句vconst

21、expr int i;/错误,未对错误,未对i初始化初始化vint j0;vconstexpr int kj+1;/错误,错误,j不是一个常量表达式不是一个常量表达式 const侧重于值不变,侧重于值不变,constexpr侧重于编译期就确定值。侧重于编译期就确定值。2023-11-1226262.3.4 指针指针v指针指针 指针是一个重要概念,如果使用得当可以指针是一个重要概念,如果使用得当可以使程序高效、简洁、紧凑。如果对指针掌使程序高效、简洁、紧凑。如果对指针掌握不牢固,编程则会出现意想不到的错误握不牢固,编程则会出现意想不到的错误 指针是内存单元的地址指针是内存单元的地址 经常所讲的指

22、针是指针变量的简称,是用经常所讲的指针是指针变量的简称,是用来存放指针(地址)的变量。来存放指针(地址)的变量。v本节重点讨论本节重点讨论C+中使用指针需要中使用指针需要注意的地方注意的地方 2023-11-1227272.3.4.1 空指针v空指针空指针 空指针表示空指针表示“未分配未分配”或者或者“尚未指向任何地尚未指向任何地方方”的指针的指针 空指针一般用来判断内存分配是否成功空指针一般用来判断内存分配是否成功 注意:注意:“空指针空指针”与与“野指针野指针”的区别的区别 在指针上下文中的常数在指针上下文中的常数0被编译成空指针被编译成空指针 程序员更常使用符号常量程序员更常使用符号常量

23、NULL来表示空指针来表示空指针 C+11引入新的关键字来代表空指针常数:引入新的关键字来代表空指针常数:nullptr,将空指针和整数,将空指针和整数0的概念拆开。的概念拆开。未初始化的指针未初始化的指针2023-11-12燕京理工学院燕京理工学院2828【例2-5】指针与0。#include using namespace std;int main()int x=100;/定义整型变量x并初始化为100 int*p=0;/定义空指针p/*p=50;/此语句编译出错,不能使用空指针p=&x;/使指针p指向变量xif(p!=0)/判断指针p是否为空指针 cout*p=*pendl;/输出变量x

24、的值 int*q;/定义野指针q /*q=50;/编译通过,但程序执行时出现内存访问冲突 q=&x;/使指针q指向变量x if(q!=0)/判断指针q是否为空指针 cout*q=*qendl;/输出变量x的值 return 0;int *p=NULL;int *p=nullptr;2023-11-12燕京理工学院燕京理工学院2929【例2-5】指针与0。#include using namespace std;int main()int x100;/定义整型变量x并初始化为100 int*pnullptr;/定义空指针p /*p50;/此语句编译出错,不能使用空指针 p=&x;/使指针p指向变

25、量x if(p!=nullptr)/判断指针p是否为空指针 cout *p=*p endl;/输出变量x的值 int*q;/定义野指针q /*q50;/不同的C+编译器,处理结果不同,也被注释掉了 q=&x;/使指针q都指向变量x if(q!=nullptr)/判断指针q是否为空指针 cout *q=*q endl;/输出变量x的值 return 0;2023-11-1230302.3.4.2 指针与指针与constint *p=nullptr;const int *p=nullptr;int const *p=nullptr;指向指向const变量的指针变量的指针int*const p=nu

26、llptr;const指针指针2023-11-12燕京理工学院燕京理工学院31312.3.4.2 指针与指针与const【例2-6】指向const变量的指针。include using namespace std;int main()const int*p=nullptr;/定义指向const变量的指针pconst int a=10;/定义常变量ap=&a;/指针p指向acout*p=*pendl;/输出p所指向单元的内容int b=100;/定义普通变量bp=&b;/指针p指向bcout*p=*pendl;/输出p所指向单元的内容/*p=200;/错误,不能通过p修改p所指向单元的内容b=2

27、00;cout*p=*pendl;/输出p所指向单元的内容return 0;通过本例可以看到可以改变通过本例可以看到可以改变指向指向const变量的指针的指变量的指针的指向,但是不能通过指针修改向,但是不能通过指针修改指针指向单元的内容。指针指向单元的内容。(1)如果一个变量已被声明为常变量,只能用指向const变量的指针指向它,而不能用一般的(指向非const型变量的)指针去指向它。(2)指向常变量的指针除了可以指向常变量外,还可以指向普通变量。此时,可以通过指针访问该变量,但不能通过指针改变该变量的值。注意2023-11-1232322.3.4.2 指针与const【例2-7】const指

28、针。#include using namespace std;int main()int a=10;/定义普通变量aint b=100;/定义普通变量bint*const p=&a;/定义const指针p并初始化指向acout*p=*pendl;/输出p所指向单元的内容/p=&b;/错误,不能改变const指针p的指向*p=100;/通过指针修改p所指向单元的内容cout*p=*pendl;/输出p所指向单元的内容return 0;通过本例可以看到可以改通过本例可以看到可以改变变const指针指向单元的指针指向单元的内容,但是不能改变内容,但是不能改变const指针的指向。指针的指向。2023

29、-11-1233332.3.4.2 指针与指针与const【例2-8】指向const变量的const指针。#include using namespace std;int main()int a=10;int b=100;const int*const p=&a;/定义指向const变量的const指针p cout*p=*pendl;/输出p所指向单元的内容/p=&b;/错误,不能改变指针p的指向/*p=100;/错误,不能改变p所指向单元的内容return 0;对于指向对于指向const变量变量的的const指针,既不指针,既不能改变指针指向单能改变指针指向单元的内容,也不能元的内容,也不能

30、改变指针的指向。改变指针的指向。2023-11-1234342.3.4.2 指针与指针与constv小结小结指针和指针和const的关系比较复杂,的关系比较复杂,const有两个有两个位置,可形成三种指针:位置,可形成三种指针:const int *p=nullptr;int const *p=nullptr;指向指向const变量的指针变量的指针int*const p=nullptr;const指针指针2023-11-1235352.3.4.2 指针与指针与constv小结小结指针和指针和const的关系比较复杂,的关系比较复杂,const有两个有两个位置,可形成三种指针:位置,可形成三种指

31、针:const int *const p=nullptr;int const *const p=nullptr;指向指向const变量的变量的const指针:指针:2023-11-1236362.3.4.3 指针与指针与constexprv在定义一个指针时,可以加在定义一个指针时,可以加constexpr关键字修饰,关键字修饰,这样的指针也称为这样的指针也称为constexpr指针。指针。注意注意:constexpr仅仅对指针有效,与指针所指的对象仅仅对指针有效,与指针所指的对象无关。无关。由于由于constexpr指针是编译期常量,其指向由其定义时的初始值指针是编译期常量,其指向由其定义时的

32、初始值确定后不允许再改变,把其初始值设置为确定后不允许再改变,把其初始值设置为nullptr或者或者0,只是,只是从语法层面上允许这样做,在实际编程中没有意义。从语法层面上允许这样做,在实际编程中没有意义。定义于所有函数体之外的变量其地址固定不变,能用来初始化定义于所有函数体之外的变量其地址固定不变,能用来初始化constexpr指针。指针。C+允许函数定义一类有效范围超出函数本身的变量,如局部允许函数定义一类有效范围超出函数本身的变量,如局部静态变量,这类变量和定义在函数体之外的变量一样也有固静态变量,这类变量和定义在函数体之外的变量一样也有固定地址,因此,定地址,因此,constexpr指

33、针也能指向这样的变量。指针也能指向这样的变量。2023-11-1237372.3.4.3 指针与指针与constexpr【例2-9】constexpr指针的定义与使用。#include using namespace std;int i=10;/定义全局整型变量iconstexpr int j=20;/定义常量表达式变量j int main()/定义指向变量的constexpr指针p,并使其指向全局整型变量i constexpr int*p=&i;/定义指向常变量的constexpr指针q,并使其指向常量表达式变量j constexpr const int*q=&j;2023-11-12383

34、82.3.4.3 指针与指针与constexprint main()/通过constexpr指针p输出变量i的值 couti=*pendl;/通过constexpr指针q输出常量表达式变量j的值 coutj=*qendl;static char x=A;/定义局部静态变量x /定义指向变量的constexpr指针px,并使其指向局部静态变量x constexpr char*px=&x;/通过constexpr指针px输出局部静态变量x的值 coutx=*pxendl;return 0;2023-11-1239392.3.4.4 void指针指针vvoid在作为函数类型和参数类型时为空类型,在作

35、为函数类型和参数类型时为空类型,表示没有返回值或参数。表示没有返回值或参数。vvoid修饰指针时称为修饰指针时称为“无类型指针无类型指针”,表示,表示该指针可以指向任意类型的变量。该指针可以指向任意类型的变量。v虽然虽然void指针可以指向任意类型的数据,但指针可以指向任意类型的数据,但是在使用是在使用void指针时必须对其进行强制类型指针时必须对其进行强制类型转换,转换成它所指向单元的实际类型,然转换,转换成它所指向单元的实际类型,然后才可以使用。后才可以使用。2023-11-1240402.3.4.4 void指针指针【例2-10】void指针的定义与使用。#include using n

36、amespace std;int main()int x=100;void*p=&x;/定义void指针p指向x int*q=nullptr;/定义整型指针q /cout*p=*pendl;/错误 cout*p=*(int*)pendl;/正确 /q=p;/错误 q=(int*)p;/正确 cout*q=*qendl;/输出指针q指向单元的内容 return 0;2023-11-1241412.3.4.4 void指针指针v为什么要使用为什么要使用void指针指针 因为因为void指针可以指向任意类型的数据,指针可以指向任意类型的数据,所以使用所以使用void指针时把指针时把void指针所指向

37、指针所指向的数据给抽象化了,这样可以增加程序的数据给抽象化了,这样可以增加程序的通用性的通用性 v使用使用void指针的两个例子指针的两个例子void*memcpy(void*dest,const void*src,size_t len);void*malloc(unsigned int size);2023-11-1242422.3.4.5 new和和deletevC语言的动态内存管理语言的动态内存管理 malloc()和和free()函数函数 主要缺点主要缺点函数的返回值是函数的返回值是voidvoid*类型类型 分配内存单元时根据参数分配内存单元时根据参数sizesize的值来分配,的值

38、来分配,无法检查错误无法检查错误分配到的内存单元无法初始化分配到的内存单元无法初始化vC+中使用中使用new和和delete运算符进行运算符进行动态内存管理动态内存管理P31 最后最后2023-11-124343【例例2-11】使用使用new动态分配整型内存单元。动态分配整型内存单元。#include using namespace std;int main()int*p=nullptr;/定义整型指针定义整型指针p /用用new申请可以存放一个整型数据的内存单申请可以存放一个整型数据的内存单元,将申请到的内存首地址存入指针变量元,将申请到的内存首地址存入指针变量p p=new int;/输出

39、指针输出指针p指向单元的内容指向单元的内容 cout *p=*p endl;return 0;2.3.4.5 new和和delete2023-11-124444【例例2-12】使用使用new和和delete动态管理内存单元。动态管理内存单元。#include using namespace std;int main()int*p=nullptr;p=new int;cout*p=*pendl;delete p;p=nullptr;return 0;2.3.4.5 new和和delete2023-11-124545v申请内存空间并进行初始化申请内存空间并进行初始化 指针变量指针变量=new 数据

40、类型数据类型(初值初值);v分配多个连续变量的存储空间分配多个连续变量的存储空间 使用使用new 和和delete 指针变量指针变量 =new=new 数据类型数据类型 元素个数元素个数;delete delete 指针变量指针变量;:兼容兼容C语言的语言的malloc/free方式方式,单个变量的单个变量的new/delete方式方式,多多个变量的个变量的new/delete 方式方式 2.3.4.5 new和和delete2023-11-1246462.3.5 引用引用v引用引用就是某一变量的就是某一变量的别名别名,对引用的,对引用的操作与对变量直接操作完全一样操作与对变量直接操作完全一样

41、 v引用的声明方式引用的声明方式 类型标识符类型标识符&引用名引用名=目标变量名目标变量名;2023-11-1247472.3.5 引用引用vint a=20;vint&b=a;20地址地址2000变量变量a引用引用bv在声明一个引用时,引用前面的类型标识在声明一个引用时,引用前面的类型标识符是指目标变量的类型,且必须同时使之符是指目标变量的类型,且必须同时使之初始化,即声明它代表哪一个变量初始化,即声明它代表哪一个变量.2023-11-124848【例2-13】使用引用访问变量。#include using namespace std;int main()int x=100;/定义整型变量x

42、 int&rx=x;/定义变量x的引用rx coutrx=rxendl;/输出引用rx的内容 rx=200;/给引用rx赋值 coutx=xendl;/输出变量x的内容 return 0;程序运行结果如下:程序运行结果如下:rx=100 x=2002.3.5 引用引用2023-11-124949关于引用的简单说明关于引用的简单说明v(1)引用并不是一种独立的数据类型,)引用并不是一种独立的数据类型,声明引用时必须指定其代表某一类型的实声明引用时必须指定其代表某一类型的实体(如变量、类对象),即对它初始化。体(如变量、类对象),即对它初始化。vint a;vint&b=a;vint&b;vflo

43、at a;int&b=a;2023-11-125050v(2)引用与其所代表的变量共享同一内)引用与其所代表的变量共享同一内存单元,系统并不为引用另外分配存储空存单元,系统并不为引用另外分配存储空间。间。vint a=3;vint&b=a;vcout&a&bendl;关于引用的简单说明关于引用的简单说明2023-11-125151vint a=3;vint&b=a;/声明b是整型变量的别名vint&c=b;/声明c是整型引用b的别名v(3)对引用的初始化,可以用一个变量)对引用的初始化,可以用一个变量名,也可以用另一个引用。如:名,也可以用另一个引用。如:补充:关于引用的简单说明补充:关于引用

44、的简单说明2023-11-125252v(4)引用在初始化后不能再被重新声明)引用在初始化后不能再被重新声明为另一变量的别名。为另一变量的别名。vint a=3,b=4;vint&c=a;vint&c=b;/企图重新声明c为整型变量b的别名补充:关于引用的简单说明补充:关于引用的简单说明2023-11-125353v(5)当当&a的前面有类型符时(如的前面有类型符时(如 int&a),它必然是对引用的声明;如果前面没有类型符它必然是对引用的声明;如果前面没有类型符时(时(p=&a),此时的,此时的&是取地址运算符。是取地址运算符。vint a=3,b=4;vint&c=a;vint*p=&b;

45、补充:关于引用的简单说明补充:关于引用的简单说明2023-11-125454v实际上,在实际上,在C+程序中很少使用独立变量的程序中很少使用独立变量的引用,如果要使用某一个变量,就直接使用引用,如果要使用某一个变量,就直接使用它的原名,没有必要故意使用它的别名。前它的原名,没有必要故意使用它的别名。前面举的例子只是为了说明引用的特征和基本面举的例子只是为了说明引用的特征和基本的用法。的用法。vC+之所以增加之所以增加“引用引用”,主要是利用它作,主要是利用它作为函数参数,以扩充函数传递数据的功能为函数参数,以扩充函数传递数据的功能关于引用的简单说明关于引用的简单说明2023-11-125555

46、在在C语言中,函数的参数传递有以下两种情况:语言中,函数的参数传递有以下两种情况:v(1)值传递:)值传递:将变量名作为形参和实参。将变量名作为形参和实参。此时传递给形参的是实参变量的值,此时传递给形参的是实参变量的值,数据传递是单向的,在函数执行期间数据传递是单向的,在函数执行期间形参值发生变化并不回传给实参。形参值发生变化并不回传给实参。v(2)地址传递:)地址传递:2023-11-125656v(2)地址传递:)地址传递:形参是指针变量,实参是变量的地址。形参是指针变量,实参是变量的地址。函数调用时,形参指向实参变量单元,函数调用时,形参指向实参变量单元,数据传递是双向的。数据传递是双向

47、的。2023-11-125757v【例例2-14】编写一个函数,交换两个整型变量编写一个函数,交换两个整型变量的值。的值。v(1)值传递:)值传递:教材教材4310 x20y1020 xy20102023-11-125858v(2)地址传递:传递变量的地址(指针)地址传递:传递变量的地址(指针)v【例例2-14】编写一个函数,交换两个整型变量编写一个函数,交换两个整型变量的值。的值。10 x20y*x*y20102023-11-125959v(3)引用传递:)引用传递:v【例例2-14】编写一个函数,交换两个整型变量编写一个函数,交换两个整型变量的值。的值。2023-11-126060#inc

48、lude using namespace std;void change(int&x,int&y)int tmp;tmp=x;x=y;y=tmp;int main()int x=10,y=20;cout交换前:交换前:x=x,y=yendl;change(x,y);cout交换后:交换后:x=x,y=yendl;return 0;别名别名x10变量变量x20变量变量y 别名别名y2023-11-126161对引用的进一步说明对引用的进一步说明v(1)不能建立数组的引用。)不能建立数组的引用。“引用引用”只能是变量或对象的引用。数组是只能是变量或对象的引用。数组是具有某种类型的数据的集合,其名字

49、表示该具有某种类型的数据的集合,其名字表示该数组的起始地址而不是一个变量。所以不能数组的起始地址而不是一个变量。所以不能建立数组的引用。建立数组的引用。char c6=“hello”;char&rc=c;2023-11-126262v(3)可以将变量的引用的地址赋给一个指针,)可以将变量的引用的地址赋给一个指针,此时指针指向的是原来的变量,如此时指针指向的是原来的变量,如 int a=3;int&b=a;int*p=&b;v 由于引用不是一种独立的数据类型,不能建由于引用不是一种独立的数据类型,不能建立指向引用类型的指针变量:立指向引用类型的指针变量:int&*p=&a;对引用的进一步说明对引

50、用的进一步说明2023-11-126363v(4)可以建立指针变量的引用,如)可以建立指针变量的引用,如 int i=3;int*p=&i;int*&pt=p;对引用的进一步说明对引用的进一步说明2023-11-126464v(5)可以用)可以用const对引用加以限定,不允许对引用加以限定,不允许改变该引用的值。如改变该引用的值。如 int i=5;const int&a=i;a=3;v但可以但可以 i=3 对引用的进一步说明对引用的进一步说明2023-11-126565 利用常引用作为函数形参,既能提高程序的执行利用常引用作为函数形参,既能提高程序的执行效率,又能保护传递给函数的数据不在函

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《面向对象程序设计C++》课件1第2章 面向过程程序设计概述.ppt)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|