C++讲义.docx
- 文档编号:11684544
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:102
- 大小:80.28KB
C++讲义.docx
《C++讲义.docx》由会员分享,可在线阅读,更多相关《C++讲义.docx(102页珍藏版)》请在冰点文库上搜索。
C++讲义
第1章C++对C与类无关的扩展
(1)
【本章中的知识要点】
□正确理解C语言与C++语言的差别
□C++对C语言扩充体现的几个方面
【重点难点】
□const用法
□string用法
□引用
1.1C++的基本知识
1.1.1命名空间
C++提供名字空间来防止命名的冲突。
例如,如果两个库都定义了cout,当一个应用程序使用这两个库时,将导致命名冲突。
大型应用系统由许多人来完成,命名冲突是一种潜在的危险,程序员必须细心的定义标志符以保证名字的唯一性。
名字空间std涵盖了标准C++的定义和声明,例如:
std:
:
cout。
❑命名空间的声明:
namespacettl
{
intx;
}
❑命名空间的使用(两种方式):
1)先引用再访问例如:
usingttl:
:
x;或者usingnamespacettl;
x=6;x=6;
2)直接访问如:
ttl:
:
x=34;
1.1.2C++输入输出简介
C++的基本输出包括cin和cout。
1.2C++对C语言与类无关的性能扩充
1.2.1新增const常量定义符
1.2.2功能
它用来冻结一个变量的值,使其值在程序中不能被进一步改变(置成只读属性,即变为常量)。
1.2.3定义
const类型定义符变量名==初值;
如:
constintsumValue=10;//常量定义
constint*ptr;//限定指针
voidFunction(constint&X)//限定函数的形参
{
}
1.2.4C++中为什么要提供const
其目的是替代C语言中的编译预处理命令#define(常量定义),但比它更加语义精确
因为#define无法准确地反映常量的数据类型。
如:
#definesumValue10//此时的sumValue是char型还是int型?
对变量一经const修饰后,必须给它赋初值(但用于函数的形参时不需赋初值),一经const修饰后便不能修改此符号名之值。
❑constintx=12;
x=54;//error
❑voidDisplay(constint*ptr,constintn)
{
cout< ptr[0]=1;//错误,不能修改其值(不能通过指针来改变目标单元之值) *ptr=1;//错误,不能修改其值(不能通过指针来改变目标单元之值) } 1.2.5正确区分const在修饰指针时的两种不同用法 ❑constint*ptr=&X;此时不能通过指针来访问改变目标单元之值,即*ptr=1是错误的,但是ptr本身可以被改变ptr=&Y;此种用法常见于函数的形参。 voidfun(constint*ptr) {*ptr=1;//错误的 } ❑int*constptr=&X;此时ptr本身不可以被改变(ptr=&Y是错误的);但ptr所指向的目标的单元之值是可以被改变的(如*ptr=2;即X=2);此时ptr类似于数组名(常量指针)。 intptr[10]; ptr[0]=2; 1.2.6正确区分符号名之前有无const修饰时的不同 ❑intsum=1;//无const修饰时 此时sum为变量,意味着其值可以被改变(如: sum=2;);同时其内存字节数为两个字节(在PC下为16位)。 ❑constintsum=1;//有const修饰时 此时sum为常量,意味着其值不可以被改变(如: sum=2;);同时不需要占用内存空间。 另外C++语言视经const修饰的符号名为常量特性,因而它可以用于任何可能出现数字常量的场合(如数组的大小的说明等)。 constintArraySize=10; chararray[ArraySize]; 1.2.7正确区分C语言中的#define与C++中的const的不同: ❑由#define所定义的符号名为全局性常量,因而在整个程序中应保持符号名的唯一性; ❑const可以说明一个局部或全局性同名常量(据此可以改变const符号名之值)。 ❑另外在语法方面,#define为编译预处理命令,而const为定义符,语句以“;”结束。 #defineMin1 constintMax=100; voidmain(void) {#defineMin2//错误,不能再定义同名常量 constintMax=200;//可以再定义同名局部常量 } 要点Fconst也可以限定引用与函数(见后文介绍)。 1.3bool类型 在C语言中真值用非零表示,假值用零表示。 C++新增了数据类型bool(增加可读性),可以取值true或false,用来表示真值或假值。 bool依然支持非零和零的形式。 例如: intval; cin>>val; if(val) … 也是合法的。 如果val的值非零,条件判断为真(true);如果val的值为零,条件判断为假(false)。 在默认情况下,bool表达式输出时,真值为1,假值为0。 例如: boolflag; flag=(3<5); cout< 的输出为: 1 可以用以下方式使其输出结果为true: cout< 1.4string类型 C++提供string类型来代替C语言的以null为结尾的char类型数组。 使用string类型必须包含头文件string。 有了string类型,程序员不用需要关心存储的分配,也无需处理繁杂的null结束字符,这些操作将由系统自动处理。 1.4.1定义string类型的变量 方式如下: strings1; strings2="Hello"; strings3=s2; strings4("HelloWorld"); 1.4.2转换为C风格的字符串 我们经常会在程序设计中遇到需要C风格字符串的情况(如以null结尾的char数组)。 例如,当我们打开一个文件,而文件又要求必须为一个C风格字符串时,则可用函数c_str如: stringfilename=”tt.txt”; ifstreamif; if.open(filename.c_str()); 1.4.3string的使用 【实例练习】 #include #include usingnamespacestd; voidmain() { stringstr="Hello"; cout<<"str="< "< strings(10,'*');//s表示含有十个'*'的字符串 cout< stringstr1; cout<<"请输入一个字符串: "; cin>>str1;//注意: 输入的字符串以空格或回车代表输入结束 cout<<"str1="< strings1="Hello",s2="File"; strings3=s1+s2; cout<<"s3="< if(s1==s2) cout<<"s1=s2"< else cout<<"s1! =s2"< } 1.5枚举类型 1.5.1枚举类型的声明和定义 在C语言中,我们如下方式声明一个枚举类型: enumCOLOR{RED,GREEN,BLUE}; 然后可以定义一个类型为enumCOLOR枚举类型变量: enumCOLORCL; 而在C++中可以不用关键字enum,如下: COLORCL; 1.5.2匿名枚举类型 声明形式: enum{MAX=1000,MIN=1}; 在这里我们可以将MAX和MIN作为常量使用,例如, intarr[MAX];实际上enum的主要用途就是定义常量。 1.6变量的块内定义 1.6.1正确理解C中变量的定义要求 一般应该集中定义出。 例如在C中: voidmain() {intx=1;//正确 for(inti=0;i<10;i++)//错误 {inty=2; printf(“%d”,y); intc=10;//错误 。 。 。 } } 1.6.2C++中的变量定义的规则 可以采用“随用随定义”的方式定义出变量,即变量的块内定义---C++中允许变量在使用之前的任一语句块中定义出来,包括for循环中。 voidmain(void)voidmain(void) {intx=1;//局部变量{for(intloop=1;loop<10;loop++) {inty;//块内变量{intz=1;//块内变量 x=3,y=4;} }} } 1.6.3正确理解C++中的变量的各种作用域。 ❑文件域----全局变量(其作用域为从定义点到当前文件结束有效)。 ❑函数域-----局部变量(其作用域为本函数内有效)。 ❑函数原型域-----函数的形参,为局部变量,只在该函数体内有效。 ❑块内域-----块内定义的变量(比局部变量的作用域更小),块内定义的变量的作用域为从定义点到当前块内有效,语句块执行完毕,自动释放。 【实例练习】 intX=1;//全局变量 voidFunction(inta)//函数的形参 {intb=a;//局部变量 X=b;//正确 Y=X;//错误 } voidmain() {intY=2;//局部变量 X=2;//正确 Function(X); for(inti=0;i<10;i++)//块内定义的变量 {X=2;//正确 intC=0;//块内定义的变量 } X=2,Y=3;//正确 C=X;//错误 } 1.7变量的引用操作符& 1.7.1引用 C++利用“&”来产生一个变量的引用(该变量的别名,同一内存单元二种不同的变量名)。 intX=1; int&NewX=X; NewX=3;//注意: 改变的其实为变量X printf("%d",X);//X的值被改变为3,因为X与NewX其实为同一个变量。 1.7.2定义的语法 ❑类型定义符 &变量名=原变量名; 如: intsumValue=1; int&sumData=sumValue; 即sumData与sumValue为同一个变量,但在不同的应用场合下以不同的变量名出现。 ❑为什么要提供引用操作符: C++中的引用主要是用来解决函数调用中形参为指针型的参数时编程其函数体时的不安全性(易出错),操作更加简单、安全。 如: intadd(int*X,int*Y)改进为intadd(int&X,int&Y) {*X=*X+*Y;{X=X+Y; return*X;returnX; }} voidmain()voidmain() {inta=1,b=2;{inta=1,b=2; add(&a,&b);add(a,b); }} 【蓝梦提示】 □在这两种情况下,调用时都是采用传地址方式调用,但采用引用调用时编程其函数体时较简单、安全。 1.7.3引用调用的优点 通过引用调用可以提高调用速度,因为只需要传送地址而不需要直接将大量数据拷贝,因而特别适用于形参为大量数据的应用场合。 如: structData {inta[1000]; }AData; voidfun(structDataX) { } 这是采用传值调用时的函数定义,但是在调用时的效率较低,因为需要进行实参与形参之间的数据拷贝 voidfun(structData&X) { } 这是采用引用调用时的函数定义,在调用时的效率较高,因为形参与实参之间本身是同一个变量。 从而在调用fun(AData)时,如果使用二种不同函数定义时,其调用效果不同。 选学内容有关函数调用的两种型式----传值调用与传地址调用 ❑传值调用: 当函数的形参是以“值”的形式定义时,系统将以传值拷贝方式被调用,在调用时实参拷贝到形参,但在内存中将同时存在实参和形参,调用时占用两倍的内存空间,同时调用时的效率较低。 voidadd(intx,inty) {returnx+y; } voidmain() {inta=1,b=2; add(a,b);//在调用时刻在内存中同时存在a,b与x,y变量。 } ❑传地址调用: 当函数的形参是以“地址”的形式定义时,它将以传地址方式被调用,在调用时系统将实参的地址传送到形参中,但在内存中将仅有一份参数存在(此时实参和形参变为同一变量),调用时的效率较高。 voidadd(int*x,int*y)voidadd(int&x,int&y) {//C语言的编程方法{//C++语言的编程方法 return*x+*y;returnx+y; }} voidmain()voidmain() {inta=1,b=2;{inta=1,b=2; add(&a,&b);add(a,b); }} 1.7.4正确区分引用在如下两种不同的应用场合时的差别: ❑对一般的变量进行引用: 如引用的变量不是用作函数的形参或返回值,则说明时必需加以初始化以指明它的同地址变量。 voidmain(void) {intX=3; int&refX=X; fun(refX); cout< } voidfun(int&a) {a++;//a为refX的引用 } ❑函数的形参为引用: 如引用的变量用作函数的形参或返回值,则说明时不必要加以初始化以指明它的同地址变量,此时形参为实参的引用。 intadd(int&X,int&Y)//正确intadd(int&X=1,int&Y=2)//错误 {{ X=X+Y;X=X+Y; returnX;returnX; }} 1.7.5函数形参定义为引用参数时的调用要求 调用时实参不能为常量而必须为赋已知值的变量。 因为编译器无法为常量(无内存地址)建立内存地址,从而无法产生引用。 同时在函数调用时系统将实参地址拷贝到形参,从而使形参即为实参,但在函数体内采用形参名来访问它。 intadd(int&a,int&b)voidmain() {{intX=1,Y=2; returna+b;add(X,Y);//调用正确 }add(1,2);}//调用错误 1.7.6函数形参定义为引用参数时的的编程效果 ❑其一能在一个函数体内访问或修改另一个函数体内定义的变量的值。 【实例练习】 #include usingnamespacestd; voidIncValue(int&X);//函数的原型说明或定义(在C++中必须强制说明) voidmain() {intA=1; IncValue(A); cout<<"TheValueofAIs:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 讲义