c++语言基础知识汇总课件_第1页
c++语言基础知识汇总课件_第2页
c++语言基础知识汇总课件_第3页
c++语言基础知识汇总课件_第4页
c++语言基础知识汇总课件_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

第二章C++语言初步本章主要内容

1.C++语言的字符集、词汇

2.基本数据类型、运算符与表达式

3.C++中的与变量

4.C++中的I/O

5.基本控制结构

6.数组、结构体、共用体与枚举类型

7.指针、引用与动态内存分配

8.函数与函数重载1c++语言基础知识汇总§1C++语言的字符集与词汇1.字符集(1)字母

ABCD…Zabcd…z(2)数字

0123456789(3)特殊符号空格!#$%&.'"()*+,-?/:;<=>@[\]^_{|}~2c++语言基础知识汇总2.词汇:五类(1)关键字(保留字):系统预定义且有专门含义的单词,不允许另作它用

.C++的关键字包含了C语言的几乎所有关键字

.C++的关键字随C++的发展而不断增加

(2)标识符:由程序员为程序中的各种成份定义的名字

.以字母或_开头,由字母、_、数字组成

.不能是关键字

.C++中的标识符区分大小写

.见名知义的原则

.C++系统对标识符的长度有一定限制

(3)直接常量

(4)运算符

(5)分隔符:用来分隔不同的语法成份的单词空格"';{}#()/**///**C++的两种注释:./*…*/.//注释到行尾3c++语言基础知识汇总§2基本数据类型、运算符与表达式一.数据类型每一项数据都唯一的属于某种类型每一数据类型都有一个明确定义的值的集合每一类型的数据占用相同大小的存储空间同一类型的数据可以进行相同类型的运算数据类型简单类型复合类型指针类型*用户定义类型enum基本类型整型int浮点型float字符型char空类型void布尔型bool数组[]结构体struct共用体union类class1.C++的数据类型基本类型是由系统定义,各种语言都具备的类型复合类型与指针类型都属于用户定义类型4c++语言基础知识汇总2.基本类型int型:整型VC中占4字节float型:浮点型4字节char型:字符型1字节void型:空类型bool型:布尔型1字节值为true或false**修饰说明符long与short、signed与unsignedlong和short修改整型具有的最大值和最小值signed和unsigned告诉编译器如何处理整型和字符型数据的最高位float型可用double和long

double修饰,修改实型数据的表数范围和精度5c++语言基础知识汇总类型名字节数取值范围bool1true、falsechar1-128--127[signed]char1-128--127unsignedchar10--255int4-231--231-1[signed]int4-231--231-1unsigned[int]40--232-1[signed]short[int]2-32768--32767unsignedshort[int]20--216-1[signed]long[int]4-231--231-1unsignedlong[int]40

--232-1float4-3.4E(+/-)38--3.4E(+/-)38double[float]8-1.7E(+/-)308--1.7E(+/-)308longdouble[float]10-3.4E(+/-)4932--3.4E(+/-)4932C++中的全部基本类型6c++语言基础知识汇总二.运算符与表达式1.运算符算术运算符:+-

*/%++--关系运算符:>>===<<=!=逻辑运算符:&&||!位运算符:&|^~<<>>赋值运算符:=+=-=*=/=%=<<=>>=&=|=^=条件运算符:?:逗号运算符:,指针运算符:&*求字节运算符:sizeof函数调用运算符、强制类型转换运算符:()分量运算符:.->数组下标运算符:[]作用范围分解运算符:::动态内存分配符:new、delete插入提取运算符:<<

>>7c++语言基础知识汇总运算符的优先级与结合性运算符含义要求操作对象数目结合性()::[].->括号作用范围分解(限定)运算符数组下标运算符成员运算符左->右++--&*!~+-()sizeofnewdelete自增自减取地址指针引用逻辑非按位取反正负号强制类型转换求字节动态分配释放内存1右->左*/%乘法除法求余2左->右+-加法减法28c++语言基础知识汇总运算符的优先级与结合性(续表)运算符含义要求操作对象数目结合性<<>>左移右移运算符2左->右<<=>>=小于小于等于大于大于等于==!=等于不等于&^|按位与按位异或按位或&&逻辑与||逻辑或?:条件运算符3右->左=+=-=*=/=%=<<=>>=&=^=|=赋值运算符扩展的赋值运算符2右->左,逗号运算符2左->右9c++语言基础知识汇总C++中的类型转换转换运算符:()两种强制类型转换的方法:(目标类型名)表达式:

floatx=2.5;inty;y=(int)x;目标类型名(表达式):

floatx=2.5;inty;y=int(x);C++中的显式转换static_cast可以不用强制类型转换但一定会发生转换的地方(为了更清楚、更醒目而使用)const_cast对const和volatile进行转换reinterpret_cast转换为完全不同的意思,必须转换回原来的类型才能安全的使用,最为危险dynamic_cast把基类对象(指针)转换为派生类对象(指针)时使用使用方式

转换用关键字<目标类型名>(待转换的表达式)10c++语言基础知识汇总例:static_castvoidfunc(int){}void

main(){

inti=0x7fff;longl;floatf; l=i;f=i;//更好的方法是使用static_cast l=static_cast<long>(i);f=static_cast<float>(i); i=l;i=f;//以上两条语句会出Warning,可使用如下方式消除

i=static_cast<int>(l);i=static_cast<int>(f);

charc=static_cast<char>(i);

void*vp=&f;

float*fp=(float*)vp;//C的方法,不好

fp=static_cast<float*>(vp);//更好的方法

doubled=0.0;

intx=d;//自动发生隐式类型转换

x=(int)d;//C的方法,不好

x=static_cast<int>(d);//更好的方法

func(d);//自动发生隐式类型转换

func(static_cast<int>(d));//更好的方法}11c++语言基础知识汇总例:const_castvoid

main(){

constinti=0; //int*j=&i;//错误,不允许这样赋值

int*k=(int*)&i;//被摒弃的方法

k=const_cast<int*>(&i); //long*l=const_cast<long*>(&i);

//错误,不允许同时进行const*->nonConst* //和nonConst*->long*两项转换}12c++语言基础知识汇总例:reinterpret_cast#include<iostream>usingnamespace

std;constintsz=100;struct

X{inta[sz];};voidprint(X*x){

for(inti=0;i<sz;i++) cout<<x->a[i]<<""; cout<<endl<<"-----------------"<<endl;}voidmain(){

Xx;

print(&x); int*xp=reinterpret_cast<int*>(&x);

for(int*i=xp;i<xp+sz;i++) *i=10;

print(reinterpret_cast<X*>(xp));

print(&x);}13c++语言基础知识汇总2.表达式

由运算符连接操作数构成的式子算术表达式关系表达式逻辑表达式赋值表达式条件表达式逗号表达式14c++语言基础知识汇总§3常量与变量一.C++中的常量1.直接常量(字面常量):10,10.5,'A',"string".int型.float型.char型.字符串常量

.bool型:true、false

2.符号常量:C++中有两种符号常量#define定义的常量例:#definepi3.1415926关键字const定义的常量例:constintsz=100;#define定义的常量,在预处理时只是字符串的替换,对编译器而言,不带有任何类型信息,不便于查错;而const定义的常量带有类型信息,故优于#define定义的常量C++推荐使用const定义的常量15c++语言基础知识汇总const常量定义语法:

const类型名常量名=常量值;或类型名const常量名=常量值;例:constfloatpi=3.14;floatconstpi=3.14;constintmin=50;intconstmin=50;constintmax=2*min;intconstmax=2*min;const定义的常量,相当于定义了一个相应类型的变量,但其值不能发生改变例:constintmin=50;

min=40;//错误,不能改变min的值

所以,定义const常量的同时必须初始化,且一旦初始化后,就不会(因不能故不会)再发生变化。因此在作用范围内若某变量的值不会发生改变,则定义该变量时应用const进行限定,以免无意中改变该变量的值const常量是编译时的常量例:constintsz=100;intarr[sz];16c++语言基础知识汇总const与指针1.指向常量的指针:限定指针所指的对象、变量定义形式:

const类型*指针变量[=地址表达式];或类型const*指针变量[=地址表达式];例:intvar=35;constintmax=100;int*p;

constint*p1_const;constint*p2_const;p1_const=&var;p2_const=&max;var=40;

*p1_const=100;*p2_const=200;max=200;p=&max;p1_const和p2_const,var不是常量*p1_const和*p2_const、max是常量17c++语言基础知识汇总指向常量的指针const

int*p1_constconst

int*p2_constconst

intmaxintvarp1_const不是常量,p1_const指向的变量的值不能通过*p1_const改变,但p1_const指向的变量即var本身不是常量,是可以改变的,故*p1_const=100;var=40;p2_const不是常量,p2_const指向的变量的值不能通过*p2_const改变,且p2_const指向的变量即max本身是常量,其值不能改变,故*p2_const=200;max=200;18c++语言基础知识汇总2.指针常量:指针变量本身的值初始化后不能再改变

定义方式:

类型*const指针变量=地址表达式;例:intvar1=100,var2=200;constintmax=1000;

int*constcst_p1=&var1;

int*constcst_p2=&max;

*cst_p1=var2;

cst_p1=&var2;

只说明了指针变量如cst_p1本身是常量,但并没有说不能改变*cst_p1的值必须要赋初值19c++语言基础知识汇总3.指向常量的指针常量

指针变量本身和所指对象的值都为常量,不能改变

定义方式:

const类型*const指针变量=地址表达式;或类型const*const指针变量=地址表达式;

例:intvar1=128,var2=256;constintmax=1000;

constint*constdoubleCst_p1=&var1;constint*constdoubleCst_p2=&max;

doubleCst_p1=&var2;*doubleCst_p1=500;var1=max-var2;20c++语言基础知识汇总二.C++中的变量变量必须先定义(声明)再使用变量的定义

存储类型数据类型名变量名列表;C++中几乎随处可以定义变量例:

for(inti=0;i<100;i++)…if(i<100){intx=0;x+=100;

inty=10;}变量的分类:根据定义变量的位置,分为两类:全局变量(外部变量)局部变量(内部变量)21c++语言基础知识汇总变量的存储类型存储方式:动态存储方式和静态存储方式静态存储方式:程序运行过程中给此类变量分配固定的存储空间动态存储方式:程序运行过程中根据需要,给此类变量动态分配存储空间程序代码区静态存储区动态存储区程序的存储组织22c++语言基础知识汇总变量的存储类型auto、register、static、extern和默认五种auto:自动类型普通的局部变量都属于此类,分配在动态存储区中register:寄存器类型static:静态变量静态局部变量:在静态区中,只初始化一次,多次调用函数时能保留前一次函数调用结束时的值,延长了该变量的生存期静态全局变量:在静态区中,限制了该变量的作用域extern:外部变量定义全局变量声明外部变量:扩展了全局变量的作用域23c++语言基础知识汇总例:static#include<iostream>usingnamespacestd;intfactor(intn){

staticintresult=1; result*=n; returnresult;}voidmain(){ for(inti=1;i<=8;i++) cout<<factor(i)<<""; cout<<endl;}24c++语言基础知识汇总例:extern//main.cpp#include<iostream>usingnamespacestd;externintnTestVar;voidmain(){ nTestVar=100; cout<<nTestVar<<endl;}//test.cppintnTestVar;同一个工程的两个文件25c++语言基础知识汇总变量的生存期与作用域生存期:变量a的生存期指从a被说明且分配了内存开始,直到该变量占用的内存被释放为止,是时间概念作用域:变量a的作用域指标识符a可以代表该变量的范围,是空间概念全局变量:生存期从程序开始运行到程序运行结束,而作用域则从定义该变量的地方开始,直到本文件末尾普通局部变量:生存期从程序执行到包含该变量定义的复合语句时开始到该复合语句执行结束,而作用域则从该变量的定义处开始到包含该变量的程序块末尾静态局部变量:生存期从为该变量分配了内存起直到程序结束,但作用域则与局部变量的作用域相同例:生存期与作用域26c++语言基础知识汇总变量的初始化

定义变量的同时给变量赋以初值

.两种方法

.例:inta=3;.例:inta(3);27c++语言基础知识汇总§4C++中的输入/输出

一.输入/输出方式

1.C语言的方式:使用scanf()、printf()等输入/输出库函数

2.使用流对象的方式把数据从一个对象向另一个对象的流动抽象成流流好比管道,从一端放入什么从另一端就能取出什么C++中的流对象一般与一个文件相关联,用流对象进行输出操作相当于把要输出的数据写入文件中,进行输入操作相当于从文件中读出数据存于变量或对象中从流中获取数据的操作称为提取操作:流对象>>变量向流中添加数据的操作称为插入操作:流对象<<数据

<<:插入运算符

>>:提取运算符cin和cout是C++预定义的流对象

cout:用于进行输出操作,与显示器相关联

cin:用于进行输入操作,与键盘相关联28c++语言基础知识汇总<<与>>

用法:cout<<表达式1<<表达式2<<…<<表达式n;

cin>>变量1>>变量2>>…>>变量n;<<可以串联多个<<输出多个数据项,>>同样也可以串联多个>>给多个变量输入数据>>输入时多个数据项之间用空格、Tab或回车分隔<<和>>具有智能,能够自动判断其后的数据项的类型,并采用相应的类型进行输出或输入使用流对象时,必须#include相应的头文件(如iostream)并使用语句“usingnamespace

std;”打开名称空间std

cin与cout在iostream中的std名称空间中定义29c++语言基础知识汇总二.简单的输入/输出格式控制:使用操纵符(manipulator)I/O流类库中提供了若干个操纵符,可以直接嵌入到输入/输出语句中实现I/O格式控制操纵符功能endl输出一个换行符,并刷新流dec用十进制输入或输出数值oct用八进制输入或输出数值hex用十六进制输入或输出数值ends输出一个空格符,并刷新流setw(intn)设置其后一个数据项占据的宽度setfill(charc)设置数据项宽度不足时的填充字符setprecision(intn)设置浮点数输出小数位数常用的I/O操纵符30c++语言基础知识汇总说明:不带参数的I/O操纵符定义在iostream中使用带参数的I/O操纵符,需包含iomanipsetw()只对其后紧跟着的一个真正的数据项起作用例:cout<<'A'<<ends<<'B'<<endl; cout<<hex<<255<<ends<<32<<endl; cout<<dec<<setw(5)<<setfill('0')<<32<<endl; cout<<setw(5)<<setprecision(4)<<7.5612<<endl;屏幕输出31c++语言基础知识汇总§5基本控制结构顺序、选择(分支)和循环结构对应的控制语句控制语句无条件控制语句条件控制语句分支语句循环语句if语句switch语句switch语句for语句while语句do-while语句break语句continue语句return语句goto语句32c++语言基础知识汇总§6数组、结构体、共用体和枚举类型一.数组:需要处理相同类型的一批相关数据时使用数组分为一维数组与多维数组定义:一维数组:类型数组变量名[数组长度];二维数组:类型数组变量名[第一维长度][第二维长度];

例:intnArr[10];intnArr2d[10][5];说明:数组长度必须是常量表达式:编译时求值C意义上的字符串采用字符数组作为其存储形式,在最后添加一个ASCII码为0的字符作为字符串的结束标志33c++语言基础知识汇总string类:字符串类string类封装了字符串的基本特性和对字符串的典型操作,其对象可用于保存几乎任意长的字符串,对处理输入文件中一行上字符数不定的情况特别有用string类是STL中的类,使用时需要包含头文件string并打开名称空间stdstring类的操作:成员函数求串长:size()、length()例:#include<iostream>#include<string>usingnamespacestd;voidPrintAttribute(conststring&str){ cout<<"size:"<<str.size()<<endl; cout<<"length:"<<str.length()<<endl;}34c++语言基础知识汇总intmain(){ strings1,s2; PrintAttribute(s1);s1="Mystringobject";PrintAttribute(s1); s2="AnotherStringObject";PrintAttribute(s2); return0;}35c++语言基础知识汇总赋值:assign()=s1.assign(s2);s1=s2;连接:append+=+

s1.append(s2);s1+=s2;s1=s1+s2;下标:[]

s1[0]#include<iostream>#include<string>usingnamespacestd;intmain(){strings1="cat",s2,s3;

s2=s1;s3.assign("jump");cout<<s2<<s3<<endl;

s1+=s3;cout<<s1<<endl;

s1.append("andyell");cout<<s1<<endl;

s1[0]='h';cout<<s1<<endl;return0;}36c++语言基础知识汇总比较stringpare(s2);比较字符串s1与s2,当s1等于s2时,返回0;当s1大于s2时返回正值,否则返回负值字符串的部分比较

pare(beg1,len1,s2,beg2,len2);beg1和len1指示s1参与比较的开始字符的下标与长度,beg2和len2指示s2参与比较的开始字符的下标与长度运算符:!=<><=>=37c++语言基础知识汇总例:string的比较:字符串的排序#include<iostream>#include<string>usingnamespacestd;intmain(){stringnames[]={"LiHua","HeXiaoMing","ZhangLi","SunFei","ChenBao"};strings;inti,j,k,nmb;nmb=sizeof(names)/sizeof(names[0]);for(i=0;i<nmb-1;i++){k=i; for(j=i+1;j<nmb;j++)if(names[k]>names[j])k=j; if(k!=i){ s=names[k];names[k]=names[i];names[i]=s; }}for(i=0;i<nmb;i++) cout<<"name["<<i<<"]="<<names[i]<<endl; return0;}38c++语言基础知识汇总子串:substr()

s.substr(beg,len);beg指定子串的开始下标,len指定读取的字符数strings="C++programdesign";

cout<<s.substr(4,7)<<endl;查找:find()

s.find(substring);s.find(substring,beginning);替换:replace()s.replace(beg,num,str);39c++语言基础知识汇总例:把字母表中的逗号“,”全部替换为分号“;”#include<iostream>#include<string>usingnamespacestd;intmain(){stringalphabet="A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";

intx=alphabet.find(","); while(x>=0) {

alphabet.replace(x,1,";"); x=alphabet.find(",",x+1); } cout<<alphabet<<endl; return0;}40c++语言基础知识汇总插入:insert()s1.insert(n,s2);

例:strings1="catjump";strings2="dog";s1.insert(4,s2);s1.insert(4,"and");cout<<s1<<endl;41c++语言基础知识汇总转换成C语言式的char*型字符串:data()c_str()copy()char*ptr=s.data();//char*ptr=s.c_str();

s.copy(buffer,n,begin);#include<iostream>#include<string>usingnamespacestd;intmain(){ strings="StringObject"; constchar*ptr1;

ptr1=s.data(); intlen=s.length(); char*ptr2=newchar[len+1];

s.copy(ptr2,len,0);ptr2[len]='\0'; cout<<s<<endl;cout<<ptr1<<endl; cout<<ptr2<<endl; delete[]ptr2; return0;}42c++语言基础知识汇总从文件中输入一行字符:getline()getline(in,str,ch);

其中:in为输入流对象

str为string类对象

ch为结束输入的字符,默认为'\n'

例:strings;getline(cin,s,'\n');

从键盘输入一行字符(以回车结束),存入s中43c++语言基础知识汇总例:从文件中输入一行数据#include<iostream>#include<fstream>#include<string>usingnamespacestd;intmain(){stringline;ifstreaminput("input.txt",ios::in); while(1){

getline(input,line); if(input.eof())break;

//一行数据已存入line中,可对其处理,此处只将其输出

cout<<line<<endl; } input.close(); return0;}44c++语言基础知识汇总二.结构体:struct三.共用体:unionstruct

in_addr{

union{

struct

{unsignedchar

s_b1,s_b2,s_b3,s_b4;}S_un_b;

struct

{unsigned

short

s_w1,s_w2;}S_un_w;

unsignedlong

S_addr;

}S_un;};四.枚举类型:enum——与C中几乎一样**:自定义的数据类型可以象C++的基本数据类型一样使用例:in_addrIP_Address;45c++语言基础知识汇总§7指针、动态内存分配与引用.程序访问内存中数据的两种方式

.直接访问.间接访问

.指针就是地址,存放地址的变量就是指针变量

.指针变量的定义:

数据类型名*指针变量名;或数据类型名*指针变量名=初始地址值;200X200X&Xpx例:float*ptr;floatx=200.0;float*px=&x;float*pn=NULL;float*pr;指针变量的三种状态

.指向某一变量

.被赋予空值NULL,未指向任何变量

.未赋值,处于“悬空”(随机)状态一.指针46c++语言基础知识汇总.与地址有关的运算符:&和*.取地址运算&:得到一个变量的地址

.一元运算符

.其后只能是一个变量名,不能是常量或表达式

.指针运算符*:取指针指向的变量的值

.一元运算符

.其后为一指针例:*px=300.0;

x=300.0;

*与&互为逆运算47c++语言基础知识汇总.指针的运算.算术运算指针可以和整数进行+、-运算,指针变量本身也可以进行++、--运算指针的算术运算一般和数组的使用相联系

.关系运算:在指向相同类型数据的指针之间进行比较

.指针可以进行相等和不等的比较,指向同一变量(地址)时相等,否则不相等

.任一指针可以和指针常量NULL进行相等和不等的比较

.指针指向数组元素时,指针之间可以进行大小比较48c++语言基础知识汇总.指针变量的使用.指向一个变量:间接访问该变量

.指针变量与数组关联使用:

.指向数组元素例:intarr[10];int*ptr;ptr=&arr[0];//ptr=arr;数组名是数组首元素的地址

.指向数组定义方式:类型名(*指针变量名)[数组长度];例:inta[2][4];int(*pa)[4];//定义pa为指向一维整型数组的指

//针,该一维数组有4个元素

pa=a;//pa=&a[0];pa++;//pa指向a[1],则pa==&a[1]区别二者的算术运算

使用时必须确保指向一个确定的有意义的空间49c++语言基础知识汇总.指针数组:数组中的每个元素都相当于一个指针变量

定义形式:类型名*数组名[数组长度];例:inta,b,c;int*parr[3];parr[0]=&a;parr[1]=&b;parr[2]=&c;.C字符串指针:可以把字符串当作一个整体进行操作50c++语言基础知识汇总.指针变量与函数关联使用.指针变量作函数参数:可改变实参指针所指变量的值

voids*px,int*py){intt;t=*px;*px=*py;*py=t;}

则inta=3,b=5;int*pa=&a,*pb=&b;s);//

s);

调用后a和b的值各是多少?voidsx,inty){intt;t=x;x=y;y=t;}则inta=3,b=5;s);调用后a与b的值各为多少?35ab35形参变量x形参变量y35ab&a&bpapb&a形参指针px&b形参指针py51c++语言基础知识汇总.函数返回指针

例:char*menu[]={"error","File","Edit","Search","Help"};char*menuItem(intm){return(m<1||m>4)?menu[0]:menu[m];}**注意:返回的指针必须是有意义的,不能是一个指向函数内的局部变量或参数变量的指针或处于“悬空”状态的指针.函数指针

.函数名代表函数的入口地址,也称做函数的指针

.可定义一指针变量,将函数的入口地址存入该指针变量中,通过该指针变量调用函数

.一般做函数的参数52c++语言基础知识汇总二.动态分配内存.两个运算符:new与delete.new用来动态生成一个指定类型的无名变量,并返回该变量的地址,只能通过该地址(指针)访问动态生成的变量

.动态生成变量:int*pi;pi=newint;*pi=100;.生成变量并初始化:int*pi=newint(5);.动态生成一个数组:intn;…//通过某种运算得到n的值

int*pi=newint[n];//此时数组长度可以是变量

.delete释放new动态生成的变量

.释放动态生成的变量:deletepi;.释放动态生成的数组:delete[]pi;

例:动态内存分配

注意:.new动态生成的变量不会自己撤消,所以该变量不用时,必须及时用delete将其释放

.new与delete比C中的函数malloc和free完善,所以C++中不建议使用malloc和free动态申请与释放内存53c++语言基础知识汇总三.引用.引用即变量的别名,对引用的操作就是对目标变量的操作

.声明引用的一般形式:

类型名&引用名=目标变量名;

例:intnSomeVar;

int&ref=nSomeVar;.引用不是变量,不占存储空间,故只能声明,没有定义

.由于引用不是变量,故不能声明引用的引用和指向引用的指针

.引用不做函数形参时,声明引用的同时必须对其初始化

.引用一旦初始化,就维系在其目标变量上,再也不分开,对该引用的任何操作,都是对引用维系的目标变量的操作,因此对引用的赋值就是对目标变量的赋值,而不是重新引用例:intnSomeVar=0;

intnOther=10;

int&ref=nSomeVar;

ref=nOther;//等价于nSomeVar=nOther,而不

//是让ref成为nOther的引用54c++语言基础知识汇总

引用的作用.给变量一个别名,通过别名实现对目标变量的操作

.做函数形参:此时形参是实参的引用例:voids&x,int&y){intt;t=x;x=y;y=t;}

则inta=3,b=5;s);调用后a和b的值分别是多少?.引用做函数参数的特点

.引用做函数形参,实参一般使用变量而不使用常量或表达式

.可改变实参的值,若不需改变实参的值时可在形参引用前加上关键字const,则由编译器保证不会无意中修改实参值

.可以使函数带回多个值

.可以减少函数调用过程中的开销

.比指针简洁方便,易使用,好理解35axby55c++语言基础知识汇总§8函数与函数重载函数的定义与声明定义:属性说明返回值类型函数名(形参列表){函数体}

其中的属性说明可以是以下几个关键字之一:

.inline.static.virtual.friend.extern:C++中函数的缺省属性就是extern函数的声明:使用函数原型进行声明属性说明返回值类型函数名(形参列表);**注意:

程序中对函数的调用出现在函数的定义之前时,调用之前必须进行声明函数进行声明时形参只出现类型即可,可以不使用形参名函数的声明与定义中返回值的类型必须一致,参数的类型、数目必须相符一.函数56c++语言基础知识汇总

函数的使用:对函数进行调用

形式:函数名(实参列表);

例:s);.函数调用过程中的参数传递

.值传递

.指针传递:仍为值传递,传递的是地址值

.引用传递:形参是实参的别名,完全代表了实参57c++语言基础知识汇总

函数的属性.extern(外部)函数:C++中函数缺省的属性就是外部的例:externintfunc(){…}

则函数func()的作用范围不仅仅局限于定义它的文件中,在其它文件中可以通过使用:externintfunc()对其进行声明,从而在第二个文件中可以调用在第一个文件中定义的func()函数

.因C++中函数的缺省属性就是extern的,所以定义和声明函数时通常省略关键字extern.static(静态)函数

例:staticintfunc(){…}

static关键字限制函数func()的作用范围仅在定义它的文件中,其它文件中不可能通过声明的方式对该函数进行调用,即使进行了声明也无济于事58c++语言基础知识汇总.inline(内联)函数.定义或声明函数时,在返回值类型前使用关键字inline进行修饰的函数例:inlineintadd(intx,inty){returnx+y;}.内联函数不被编译为单独一段可执行代码,而是把函数的可执行代码直接插入到对该函数的每一次调用处,所以没有函数调用过程中的开销,可以提高程序的效率

.与带参的宏相似,但因为函数的参数带有类型信息,所以比宏安全例:inlineintmax(intx,inty){returnx>y?x:y;}voidmain(){inta,b;cin>>a>>b;cout<<max(a,b)<<endl;}59c++语言基础知识汇总例:内联函数**注意

.若inline不在函数名第一次出现时指定,则编译器把该函数做为普通函数对待

.内联函数的函数体应尽可能简洁,否则会增加程序的体积

.内联函数中不能包含复杂的流程控制语句,否则inline关键字将不会起作用,该函数将成为普通函数

.inline函数不能递归,也不能包含静态变量inlineintisnumber(char);voidmain(){charc;intn;n=0;while((c=getchar())!='\n'){if(isnumber(c))n++;}c

温馨提示

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

评论

0/150

提交评论