C2B2B程序设计(part1).ppt

上传人:cl****1 文档编号:570619790 上传时间:2024-08-05 格式:PPT 页数:91 大小:776.01KB
返回 下载 相关 举报
C2B2B程序设计(part1).ppt_第1页
第1页 / 共91页
C2B2B程序设计(part1).ppt_第2页
第2页 / 共91页
C2B2B程序设计(part1).ppt_第3页
第3页 / 共91页
C2B2B程序设计(part1).ppt_第4页
第4页 / 共91页
C2B2B程序设计(part1).ppt_第5页
第5页 / 共91页
点击查看更多>>
资源描述

《C2B2B程序设计(part1).ppt》由会员分享,可在线阅读,更多相关《C2B2B程序设计(part1).ppt(91页珍藏版)》请在金锄头文库上搜索。

1、C+程序设计(part1)南京大学软件学院郑滔Tel:506Room:623Ole-JohanDahlKristenNygaardnNorwegiancomputerscientistnTuringAwardin2001nhttp:/heim.ifi.uio.no/olejohan/nhttp:/heim.ifi.uio.no/kristen/FatherofSimula67FatherofOOprogrammingE.W.DijkstraNiklausWirthnSwisscomputerscientistnTuringAwardin1994nhttp:/www.inf.ethz.ch/pe

2、rsonal/wirth/DesignPASCAL、Modula2、OberonnNetherlandcomputerscientistnChairofComputerSciencesattheUniversityofTexasatAustinfrom1984until2000.nTuringAwardin1972nhttp:/www.cs.utexas.edu/users/EWD/“ACaseagainsttheGOTOStatement”Algol68DennisRitchieKenThompsonnAmericancomputerscientistnTuringAwardin1983(工

3、程师获奖)nhttp:/cm.bell- nhttp:/plan9.bell- - Principles and Practice Using C+ Bjarne Stroustrup,Addison-Wesley ISBN 978-0321543721ToappearAugust2008参考书nLanguage&StandardLibrarynTheC+ProgrammingLanguage(ThirdEdition),BjarneStroustrup,Addison-Wesley,1998,ISBN0-201-92488-9nspecialedition2000nThinkinginC+,

4、BruceEckel,PrenticeHall,1995参考书nProgrammingnEffectiveC+,SecondEdition:50SpecificWaystoImproveYourProgramsandDesigns,ScottMeyers,Addison-Wesley,1998,ISBN0-201-92488-9nMoreEffectiveC+:35NewWaystoImproveYourProgramsandDesigns,ScottMeyers,Addison-Wesley,ISBN0-201-63371-XnC+StrategiesandTactics,RobertMur

5、ray,Addison-Wesley,1993,ISBN0-201-56382-7GenericProgrammingEfficient,Reusable参考书nSamplesnC+ProgrammingStyle,TomCargill,Addison-Wesley,1992,ISBN0-201-56365-7nOthersnAdvancedC+:ProgrammingStylesandIdioms,JamesCoplien,Addison-Wesley,1992,ISBN0-201-54855-0nDesigningandCodingReusableC+,MartinD.Carrolland

6、MargaretA.Ellis,Addison-Wesley,1995,ISBN0-201-51284-X参考书nOthersnScientificandEngineeringC+,JohnJ.BartonandLeeR.Nackman,Addison-Wesley,1994,ISBN0-201-53393-6nDesignPatterns:ElementsofReusableObject-OrientedSoftware,ErichGamma,RichardHelm,RalphJohnson,andJohnVlissides,Addison-Wesley,1995,ISBN0-201-633

7、61-2C和C+nCnBCPL(Martin Richards)B(Ken Thompson)C(Dennis Ritchie)nUnix的开发语言1972nANSIC 1989 Kernighan Ritchien可应用于多种技术领域和多种平台的开发系统-从最小的嵌入式处理器到最大的超级计算机和数据处理系统n主要特点n语言简洁、紧凑n可直接访问内存,胜任OS的开发n目标代码质量高、运行效率高n具有良好的可移植性C和C+nC+n“Cwithclass”Bjarne Stroustrup 1980 年 贝尔实验室n1983年取名为C+Rick MascittinANSIC+标准草案1994年n主

8、要特点n完全包含C语言成分(C的超集)n添加了OOP的完全支持C+ 支持支持 C 所支持的全部编程技巧所支持的全部编程技巧任何任何 C 程序都能被程序都能被 C+ 用基本相同的方法编写,并具备相同的运行效率和空间用基本相同的方法编写,并具备相同的运行效率和空间ProgrammingParadigmnImperativeParadigmnDigitalhardwaretechnologyandtheideasofVonNeumannnObject-OrientedParadigmnThetheoryofconcepts,andmodelsofhumaninteractionwithrealwor

9、ldphenomenaProgrammingParadigmnFunctionalParadigmnMathematicsandthetheoryoffunctionsnLisp(atom,list,cons,)app:EmacsnLogicalnAutomaticproofswithinartificialintelligencenBasedonaxioms,inferencerules,andqueriesnprolog程序设计范型n结构化程序设计n功能分解、逐步求精n单入口、单出口的三种控制结构n缺点n程序和数据的分离使得程序难以理解n重用性差程序设计范型n面向对象程序设计n本质n对象将

10、数据和处理数据的过程当成一个整体n封装和数据隐藏n继承和重用n多态性n动态定连(DynamicBinding)n一名多用、类属程序定律n结构化程序设计n算法数据结构n面向对象程序设计n对象对象对象“消息消息”结构化程序设计部分语言的组成n三要素nSyntax、Semantics、PragmaticsnDataStructureAlgorithmn数据n名、类型、值、地址、性质n数据处理n操作算术(移位)、逻辑、IOn控制流顺序、选择、重复基本数据类型nchar、int、float、doublenModifiers:long、short、signed、unsignednchar只能用signed

11、、unsigned修饰nfloat不能被修饰ndouble只能用long修饰nint可以用4种修饰符组合修饰n省略表示n操作符sizeofnANSIC+:wchar_t、bool基本数据类型ntypedefn为已有的类型定义一个同义词typedefdoubleprofit;typedefintINT;nC+是强类型语言n要求程序设计者在使用之前对数据的类型进行声明表达式n操作数、操作符和标点符号组成的序列,表示一个计算过程n优先级a+b*cn结合性a+b-cn求值次序(a+b)*(a-b)与编译系统有关n类型转换约定intx=10;floaty=2.0;x*yn表达式种类n算术表达式n关系和逻

12、辑表达式n赋值表达式n逗号表达式n字位运算符表达式n操作符可重载表达式n计算与类型n相同类型的两个操作数运算后,其结果仍然为该类型的值n类型对计算的限制n类型具有取值范围,超出取值范围的值没有意义n混合类型计算和类型转换n转换总是朝表达能力更强的方向,并且转换总是逐个运算符进行n自动转换(隐式类型转换coersion)n显式转换(强制类型转换casting)表达式n赋值表达式n左值右值表达式n左值:可以出现在赋值表达式左部的表达式, 具有存放数据的空间n类型不同时,先计算右值表达式的值,再转换为左值类型,然后赋值n算术表达式n增量和减量操作符n前增量(前减量)+a ( -a ) 前增量的结果是

13、左值n后增量(后减量)a+ ( a- )n提高编译结果的执行效率表达式n条件运算符表达式n?:n唯一的三目运算符n只计算一个运算分量n如果和的值类型相同,且均为左值,则该条件运算符表达式为左值表达式n可嵌套nsign(x)x0?1:x=0?0:-1n就近原则表达式n逗号表达式n,n的值作为该逗号表达式的值inta,b,c;d=(a=1,b=a+2,c=b+3);coutdendl;6n如为左值,则该逗号表达式为左值表达式n字位运算符表达式n对整型数二进制位(bit)的操作,将整型数看作二进制序列n取反、与&、或|、异或n按位取反单目n按位与&双目复位n按位或|双目置位n异或双目n与全0的二进制

14、串的运算不变n与全1的二进制串的运算取反n与本身的运算清零n与同一个对象运算两次还原n移位运算符表达式表达式n求值次序与副作用n操作数的求值次序在ANSIC+中没有规定,由各编译系统自行决定。n不同的编译系统求值顺序不同int a=3, b=5; c = a*b + +b;n求值次序使交换率失去作用int a=3; c = a+ * +a;n副作用的危害n破坏了可移植性n降低了程序的可读性n消除副作用语句n表达式语句nIO语句ncin、coutiostream.hn、可重载n控制流语句n顺序、选择、重复iostreamstdio.h语句nswitchnswitch后必须是整型表达式,case后

15、必须是整型常量表达式n值各不相同n各个case(包括default)出现的次序可以任意ncase仅起标号作用,不改变执行顺序nbreakn多个case可以公用一组语句n通常可以和if语句配合使用enum函数n原则n函数定义不允许嵌套n先定义后使用n函数的执行机制n建立被调用函数的栈空间n保存调用函数的运行状态和返回地址n参数传递n值传递(callbyvalue)n引用传递(callbyreference)n将控制转交被调函数CallbynameCallbyvalue-resultRuntimeEnvironment函数n函数原型n遵循先定义后使用原则n自由安排函数定义的位置n标准库函数的函数原

16、型都在头文件(.h)中提供,用# #includeinclude 指令包含这些原型文件n用户自定义的函数必须在源代码中说明函数原型n函数原型是一条语句n函数原型不必含有参数的名字,只需含有参数的类型n函数原型必须和函数定义在返回值类型、函数名和参数表完全一致,编译器在遇到函数调用时,需检查函数原型函数n函数重载n原则n一组重载函数,相互间至少在参数个数、类型或顺序上有所不同n返回值类型不作为区别重载函数的依据n匹配重载函数的顺序n严格n内部转换n用户定义的转换void f(long); void f(double); f(10);ambiguousNamemanglingextern “C”函

17、数n带默认参数的函数n默认参数的声明n函数原型中给出n先定义的函数中给出n默认参数的顺序规定n从右到左,中间不能间断n默认参数与函数重载void f(int); void f(int, int=2); ambiguous函数n内联函数inlinen目的n提高程序的可读性n提高程序的运行效率n对象n使用频率高的小段代码n实现方法n编译系统将为inline函数创建一段代码,在每次调用时,用相应的代码替换n限制n非递归n由编译系统控制函数明智地运用inlining(Useinliningjudiciously)缺点n增大目标代码(objectcode)n病态的换页(thrashing)n降低指令快取

18、装置的命中率(instructioncachehitrate)n只是对编译系统的提示nBig/complex/nFunctionpointernCompiler(outlined)nstaticfunctionnrecompile/linkvsrebuild作用域与生命期n程序的局部性原则n程序的内存结构nCode、Globaldata、Stack、HeapnScopen全局变量nstaticn局部变量n静态局部变量nstatic(生命期)程序结构n程序结构n逻辑结构n物理结构n多个源文件组成n只能其中一个文件含有主函数n工程文件n外部函数n外部变量extern mainf1f2fncpp1c

19、pp2cpp3obj1obj2objnCompilerexeLibLinker程序结构nStaticglobalvariable staticn防止名冲突n值可靠nStaticfunctionn限制使用n对函数定义的补充staticnConstantn缺省为staticn开放extern程序结构n标识符在程序中有效的范围n程序级外部量、外部函数n文件级静态函数、静态全局量n函数级标号、形式参数、局部量n块级n可见性n分析在某一位置标识符的有效性n:引用全局变量nnamespacenusing namespceint global;/程序级void f() /程序级static float f;

20、 /文件级static void g() /文件级 void main() int x; /函数级 if (x0) float x=0; /块级 多文件结构nHeaderFile声明的部分n宏定义n包含指令n类型声明n函数声明n内联函数n常量定义n变量声明编译预处理n包含#include“”n宏定义define字符串 字符串undef宏名字带参数的宏n条件编译#if#else#elif#endif#ifdef#ifndefn设定编译器状态#pragmawarning(disable:4101)once数组n特征n相同数据类型n有序n连续存储0n-1n一维数组n类型定义n函数参数n仅传递地址n元

21、素个数需通过参数显示给出,不能通过sizeof取得n字符串数组n多维数组n定义TAc1c2n存储组织n参数传递n只能缺省第一维n降维处理typedef T A1c2;A1 Ac1;数组#include int maximum(int grade, int num)int max = 0; for (int k=0;k max)max = gradek; return max;void main()int A24 = 68,69,70,71 , 85,86,87,89; cout “the max grade is” maximum( );sizeof(A)/sizeof(A00)maximum

22、(&A00,2*4);A0,2*4结构和联合nstructn赋值同类型nalignn参数传递nunionn共享存储空间_declspec(align(8)结构和联合n例:定义一个能存储例:定义一个能存储100个图形的数组变个图形的数组变量,其中的图形可以是:直线、矩形、圆。量,其中的图形可以是:直线、矩形、圆。FIGURE figures100;struct Line double x1, x2, y1, y2;struct Rectangle double left, top, right, bottom; struct Circle double x, y, r; enum FIGURE_

23、TYPE LINE, RECTANGLE, CIRCLE;struct Line struct Rectangle FIGURE_TYPE t ; FIGURE_TYPE t; double x1, x2, y1, y2; double left, top, right, bottom; ; ;struct Circle FIGURE_TYPE t; double x, y, r; ;union FIGURE FIGURE_TYPE t;Line line;Rectangle rect; Circle circle; FIGURE figures100;结构和联合void draw(FIGUR

24、E figure)多态性多态性switch ( figure.t )case LINE: draw_line(figuresi.line); break;case RECTANGLE: draw_rectangle(figuresi.rect); break;case CIRCLE:draw_circle(figuresi.circle); break;void main()InputF( figures, 100 );for (int i=0;i100;i+) draw(figuresi);void input (Figure fig, int size) int t; for (int k

25、=0; k t; switch (t) case LINE: figk.type = LINE; cin figk.line.x1 figi.line.y1 figk.line.x2 figi.line.y2; break; case RECTANGLE: case CIRCLE: . 指针 处理地址信息、动态数据n指针定义与基本操作n指针与函数n指针与数组n指针与结构n多级指针n动态变量指针定义与基本操作n定义n格式 * int *p; /p为一个指针变量n语义指针变量的值是另外一个变量的内存地址。如:上述指针变量 p 的值为某一整型变量的内存地址。n说明n当在一个定义(或声明)中定义(或声

26、明)多个指针变量时,每个指针变量前都要有*int *p,*q; /p和q均为指针变量int *p, q; /p为指针变量,q为整型变量指针定义与基本操作n也可以先用 typedef 定义一个指针类型,然后再用该指针类型定义指针变量,如:typedef int* Pointer; Pointer p,q; / p和q均为指针变量n取地址操作符(&)和间接取内容操作符(*) int x=9; int *p; p = &x;*p = 1000; 9x0X5A12p 0X7B77 0X5A12 1000指针定义与基本操作n当一个指针变量的值为另一个变量的地址时,通常也说成:该指针指向另一个变量,如:指

27、针变量p指向整型变量x,可用下面的图示法表示:nPointerliteral(0 / NULL)n不指向任何对象n指针变量的初始化n区别*的三种用途n乘法运算符n指针定义(或声明)符n取指针所指向的值(间接访问)p1000x指针定义与基本操作n指针的运算n赋值对于一个指针变量,可以把一个同类型的指针值赋给它。 int x; double d; int *p, *q; p = &x; p = &d; /error q = p;*p = *q;p = NULL;p = 120;/errorp = (int *)120;指针定义与基本操作n加上或减去一个整型值n一个指针值可以与一个整型值进行加或减运

28、算,结果为同类型的指针值。int x; int *p;p = p + 1;p = &x + 2;p+; p-;n当一个指针值与一个整型值进行加(或减)运算时,实际加(或减)的值由该指针值类型决定。int *p; double *q;p+; /p的值加4 ( sizeof(int) )q+; /q的值加8 ( sizeof(double) ) 指针定义与基本操作n同类型的指针值相减同类型的指针值可以相减,结果为整型值。int *p, *q;int offset;offset = p - q;int a10;int *p, *q,offset;p = &a0;q = &a3;offset = p

29、- q; /结果值为 3指针定义与基本操作n两个同类型的指针值比较两个同类型的指针值可以进行等于(=)和不等于(!=)比较,一般不进行大于(,=)和小于(,=)比较。n指针值的输出int x=1; int *p=&x;cout p; /输出p的值 (x的地址)cout *p; /输出 p所指向的元素的值特例:char *p=ABCD;cout p; /输出p指向的字符串,即: ABCDcout *p; /输出p指向的字符,即:Acout (void *)p /输出p的值指针定义与基本操作nvoid *只存放地址信息void *p;n任何其它类型的指针均可以赋值给void指针void *any_

30、pointer; int x; double y;any_pointer = &x;any_pointer = &y;n不能进行指针运算和间接引用(*),若要进行指针运算或间接引用,必须作强制类型转换。*any_pointer /error*(int *)any_pointer) /OK*(double *)any_pointer) /OK指针定义与基本操作例:将某指针所指向的一块内存清零。void memset ( void *pointer, unsigned size) char *p = (char *)pointer; for (int k=0;ksize;k+) *p+ = 0;v

31、oid memset(void *, int, unsigned);void memcpy(void *, void *, unsigned size);指针定义与基本操作n常量指针与指针常量n常量指针const * const int x=0; int y;const int *p; /p为指向常量的指针(常量指针)int *q;p = &x; /OKq = &y; /OK*p = 1; /Error*q = 2; /Okq = &x; /Error! Why?p = &y; /OK! Why? constantPvariable x(常量)const_cast指针定义与基本操作n指针常量

32、* const 必须在定义时初始化 int x, y;int * const p = &x; /p为指向一个整型变量的指针常量p = &y; /Error*p = 1; /Ok variableP(常量)constant xconst int * const p; ?指针与函数n指针作为行参n提高传输效率n函数副作用n常量指针nFunctionPointern指向函数的指针double f(int x) int g() void main() double (*fp) (int); / typedef double (*FP)(int); / FP fp; fp = f; fp = &f; (

33、*fp)(10); fp(10); fp = g; /Error函数指针n函数参数 编写函数,使其能计算任意一元函数在某区间上的定积分 #include double integrate(double (*f)(double),double a, double b) (*f)(x), a , b, double my_func(double x) void main() integrate(sin,0,1); integrate(cos,1,2); integrate(my_func,1,10); 示例nsortintscompare(constvoid*elem1,constvoid*ele

34、m2)TStudent*p1=(TStudent*)elem1;TStudent*p2=(TStudent*)elem2;returnstrcmp(p1-name,p2-name);voidMySort(void*base,unsignednum,unsignedwidth,int(*compare)(constvoid*elem1,constvoid*elem2)char*A=(char*)base;char*tmp=(char*)malloc(width);for(unsignedi=1;inum;i+)for(unsignedj=0;j0)/AjAj+1)memcpy(tmp,A+j*w

35、idth,width);/inttmp=Aj;memcpy(A+j*width,A+(j+1)*width,width);/Aj=Aj+1;memcpy(A+(j+1)*width,tmp,width);/Aj+1=tmp;free(tmp);TStudentstudent=;intnum=sizeof(student)/sizeof(student0);intwidth=sizeof(student0);MySort(student,num,width,icompare);指针与数组n数组元素操作n下标表达式n访问效率n数组元素的指针表示法n一维数组n多维数组int b2010; / typ

36、edef int A10; A b20; int *q; q = &b00; q = b0; bij *(&b00+i*10+j) *(q+i*10+j) qi*10+jA *p; int (*p)10;p = &b0; p = b;bij *(*(b+i)+j) *(*(p+i)+j) pijint a10; int *p; int i;p = &a0; p = a; /数组名表示其首元素的地址,是常量!数组名表示其首元素的地址,是常量! (int *const)ai *(a+i) *(p+i) pi&ai a+i p+i &pi指针与数组n指针数组数组中的元素为指针char *s1 = “

37、C+”, “PASCAL”, “FORTRAN”;char s28 = “C+”, “PASCAL”, “FORTRAN”; s1C + + 0P A S C A L 0F O R T R A N 0s2指针数组n函数main的参数n带参数和返回值的函数main的原型为 int main(int argc, char *argv, char *env)nargc: : 参数个数nargv: : 命令行参数nenv: : 环境参数。n示例c:copyfile1file2操作系统将启动copy程序,调用其main函数,nargc:3nargv:copy、file1、file2nenv:#inclu

38、de#include#includevoidMyFormat(char*lpszFormat,.)va_listmarker;va_start(marker,lpszFormat);for(inti=0;i4;i+) coutva_arg(marker,double)xn结构作为函数参数n大块数据传输nconst多级指针n指针变量所指向的数据类型为指针类型int *pp; /pp为指针变量,指向另一个指针 /变量(int *)int x = 2, y = 8;int *p p = &x; *pp = &y; *pp = p; pp = &p;*p = 100; *p = 200;n指针变量必须

39、初始化或赋值,否则将会导致运行时刻的严重错误多级指针n编写一个函数,交换两个字符串void swap(char *p1, char *p2)char *tmp = *p1;*p1 = *p2;*p2 = tmp;void main()char p18 ; strcpy(p2, abcd“);char p28 ; strcpy(p2, 1234“);cout p1 p2 endl;swap(&p1,&p2);cout p1 p2 endl;动态变量n动态变量n编译时刻无法确定n在程序运行时刻,动态产生、消亡n通过指向动态变量的指针变量来实现的n分配在程序的堆区(heap)n局部变量也是动态产生、

40、消亡,但在程序运行前,编译程序已经知道它们的存在n动态变量与C+中的静态(static)变量属于不同的范畴,动态变量是程序设计中的概念(与语言无关),static是C+语言中的概念。动态变量n动态变量的产生nnewnnewint *p = new int10;int (*p2)5 = (int (*)5)p;for (int i=0;i10;i+) pi = i+1;for (int j=0;j2;j+) for (int k=0;k5;k+) cout p2jk ; cout endl;typedef int i5Array 5;void main() i5Array *p = new i5

41、Array 2; for (int j=0;j2;j+) for (int k=0;kcontent = some_int_value; p-next = NULL;n如果链表为空 head = p;n插在表头 p-next = head; head = p;单链表n如果插在表尾 NODE *q = head; while (q-next ) q = q-next; q-next = p; n插在链表中某一个结点(a)的后面 NODE *q = head; while (q & q-content != a ) q = q-next; if (q) /存在a p-next = q-next;

42、q-next = p; else / 不存在a cout content != a) q1 = q2; q2 = q2-next; if (q2) /存在a if (!q1) / a是第一个结点 p-next = q2; head = p; else / a不是第一个结点 p-next = q2; q1-next = p; else /不存在ai cout content != a) q1 = q2; q2 = q2-next; if (q2) /存在a if (!q1) / a是第一个结点 head = q2-next; delete q2; else / a不是第一个结点 q1-next

43、= q2-next; delete q2; else /不存在a cout Not found!;单向排序链struct Nodevoid print( )int k; Node *p = first; Node *next; while (p ) *first = NULL; cout k next;void release( ) while (first ) Node *p = first;void main() first = first-next; . cinm; delete p; insert(m ); .; delNode(n); . print( ); release( );单

44、向排序链void insert( int k) Node *p = new Node; p-k = k; p-next = NULL; /创建新结点创建新结点 if (!first) first = p; /链表为空链表为空 else if (k k) p-next = first; first = p; /插入在头结点插入在头结点 else Node *p1 = first, *p2 = p1-next; while (p2 & k p2-k) p1 = p2; p2 = p2-next; if (!p2 ) p1-next = p; /插入在链表尾部插入在链表尾部 else p1-next

45、 = p; p-next = p2; /插在插在p1之后,之后,p2之前之前 单向排序链void delNode( int k )if ( !first) return; Node *p1 = first; if (k = first-k) first = first-next; delete p1; /删除头结点删除头结点 else Node *p2 = p1-next; while (p2 & p2-k != k) p1 = p2; p2 = p2-next; if (p2) p1-next = p2-next; delete p2; break; /删除中间结点删除中间结点 insert

46、(Node *first, int n); /?voidmain()Node*first=NULL;insert(first,n); /?引用n定义C+提供了引用类型,通过引用类型可以定义一个变量,它与另一个变量占用相同的内存空间;或为一个变量取一个别名。int x;int &y = x; /y引用x,y与x占用相同的内存空间x = 1;cout y; /结果为:1y = 2;cout x; /结果为:2x, y引用n引用变量和被引用变量应具有相同的类型n引用变量定义中的 & 不是取地址操作符n定义引用变量时必须要有初始化n引用类型的应用n函数参数传递n动态变量命名引用n引用类型与指针类型的区

47、别n访问n引用:直接访问n指针:间接访问n存储n引用:与被引用变量共享内存n指针:有自己的内存空间,独立于所指变量的内存n实参n引用:变量n指针:变量地址引用n函数返回值类型为指针或引用n函数返回值的类型 可以是引用 或指针类型int max1(int x, int num) int m,i; m = x0; for (i=1; i m) m = xi; return m;int * max2(int x, int num) int *p,*q; p = x; q = x+1; while (num 1) if (*q *p) p = q; q+; num-; return p;int &ma

48、x3(int x, int num) int i, j; j = 0; for (i=1; i xj) j = i; return xj;引用n如果函数返回值的类型是引用或指针类型,则函数不应该把局部量或局部量的地址作为不应该把局部量或局部量的地址作为返回值返回返回值返回n操作符重载 + = 等引用n用const 限定引用void swap(const int& a, const int& b)nC+不区分变量的const 引用和const变量的引用,程序决不能给引用本身重新赋值,使它指向另一个变量,因此引用总是const 的n释放堆中变量的引用int *p = new int(100);int &x = *p; ; delete &x;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号