C++等级考试培训辅导

上传人:仙*** 文档编号:80127861 上传时间:2022-04-24 格式:DOC 页数:43 大小:748.52KB
收藏 版权申诉 举报 下载
C++等级考试培训辅导_第1页
第1页 / 共43页
C++等级考试培训辅导_第2页
第2页 / 共43页
C++等级考试培训辅导_第3页
第3页 / 共43页
资源描述:

《C++等级考试培训辅导》由会员分享,可在线阅读,更多相关《C++等级考试培训辅导(43页珍藏版)》请在装配图网上搜索。

1、C+等级考试培训辅导题型分值应得分计算机基础知识201012C+语言程序设计选择题107填空题53阅读程序题13108完善程序题126总分6036一、基本概念题1、标识符、常量、变量、表达式、优先级、结合性()(1)标识符是以字母或下划线开头的,由字母、数字和下划线组成的字符序列。(2)表达式:是用运算符将常量、变量、函数等连接而成的式子。(3)运算符,分成算术运算符、赋值运算符、关系运算符、逻辑运算符、逗号运算符、位运算符、条件运算符和数据类型长度运算符等。(4)优先级,运算符的优先级从高到低依次为:()单目运算符(!、+、类型转换)算术运算符( *、/、% +、-) /a%b,a与b必须为

2、整型关系运算符(、=、= = =、!=)逻辑运算符(& |)赋值运算符(=)与复合赋值运算符(+=、-=、*=、/=、%=等)逗号运算符(,)(先左后右,最后取最右边表达式的值为逗号表达式的值)。(5)结合性, 双目运算符、逗号运算符具有左结合性,单目运算符与赋值运算符具有右结合性。(6)数据类型转换,有自动类型转换(charint float)与强制类型转换两种。(7)sizeof运算符:用于计算运算对象占用内存字节数。使用格式:sizeof()或 sizeof()运算结果为“类型”所指定的数据类型或“表达式”的结果类型所占的字节数。例如:sizeof(float)/值为4sizeof(a+

3、b)/值为4; a+b=97+98=195,整型数195占用4个字节内存空间char s=”ABCD”;sizeof(s)/值为5,字符数组s5共有5个元素,每个元素占用一个字节,/所以字符数组s5共占用5*1=5个字节的内存空间2007年(春)21.设有变量说明:short int a=0,b=0;则表达式sizeof(a+b)的值为: C A1B2C4/a+b转换成int类型,int 类型长度为4字节(书P18)D83、执行以下语句后,a的值为 14 。int a=0,m=3,n=10;a=(m+,m+n); /a=(m=m+1=4,m+n=4+10=14)=144、在C+中,标识符是以字

4、母或 下划线 开头的,由字母、数字和 下划线 组成的字符序列。2010年(春)21.若有“int x=6;”,则执行语句“x+=x- =x*x;”后的值是: B A36B-60 /因为复合赋值运算符“+=”与“-=”具有右结合性,/所以,x=x-x*x=6-36=-30; x=x+x=-30+(-30)=-60C60D-242010年(秋)24. 设有语句“int a=10,b=20,c=30;”,则执行语句“cout(a,b,c);”,其输出结果是: C A10B20C30 /“,”表达式从左向右计算,最后取最右边的值,coutn;int bn; /bn数组长度n不能是变量Dchar st9

5、=“a string!”; /st9个单元放不下“a string!”+010个字符。23.设有变量说明“int a,b;float x,y;”,以下C+语句中存在语法错误的语句是: A Ay=x%a;/%运算符要求两个操作数必须是整数By=x+ +x;Cy=a+bx+y?a:b;Da=x+y;2、程序控制语句(1)if浯句if () else (2)条件表达式:?:(3)switch语句switch () /表达式只能是整型、字符型与枚举型。case :/当条件1满足时,若不用break则将执行语句2 case :.case :default:(4)while语句(当型循环,先判断后执行,循

6、环体可以1次也不执行)while ()(5)dowhile语句(直到型循环,先执行后判断,循环体至少执行1次)do while ();(6)for语句(当型循环,先判断后执行,循环体可以1次也不执行)for (;) (7)break语句:只能用在循环语句和switch语句中,用于终止循环语句和switch语句的执行。(8)continue语句:只能用在循环语句中,结束本次循环,重新开始下一次循环。2007年(春)22下列关于while与do while循环语句的叙述中,正确的是: A Ado while循环体至少执行一次。/先执行后判断,循环体至少执行一次Bwhile循环体至少执行一次。Cdo

7、 while循环体不能是复合语句。Ddo while允许从循环体外跳转到循环体内。30. 设变量a,b是整型变量,下列switch语句中,语法正确的是: D Aswitch(a) case a:a+;break;/case 后只能跟常量,不能用变量,书P43 case b:b+;break;Bswitch(a+b) case 1:b=a+;break;/case后不能有两个相同的常量 case 1:a=+b;Cswitch(a*a) case 10,12:+a;/case 后不能跟两个常量 case 14,16:+b;Dswitch(a/10+b) case 3:b=a/10;break; d

8、efualt :a+=b;1、对于switch(e),表达式只能是整型、 字符型 、或枚举型。书P432010年(春)24. 执行以下语句序列:int j=0;while(j25) j+=3;coutjendl;其输出结果是: C A24B25C27 / int j=0;while(j25) j+=3; j=0,3,6,9,12,15,18,21,24,27D22010年(秋)21.对于for和do while循环语句,以下描述正确的是: C Afor语句中循环体至少执行一次。B两个语句中循环体体可能都不执行。Cdo while 语句中循环体至少执行一次。 /先执行后判断,循环体至少执行一次D

9、两个语句中的循环至少执行一次。2011年(春)21.以下关于switch语句的描述中,不正确的是: B A. switch语句中的default子句可以没有,也可以有一个。Bswitch语句中的每一个case子句中必须有一个break语句。Cswitch语句中的default子句可放在switch 语句中的任何位置。Dswitch语句中的case子句后面的表达式只能是整型、字符型或枚举类型常量。2012年(春)4、C+语言提供的基本控制结构分三种类型:顺序结构、选择结构和 循环结构。3、数组(1)一维数组定义: =初始化列表;访问:(2)二维数组定义: =初始化列表1,初始化列表n;访问:数值

10、数组a不允许整体输入、输出。cina;是错误的!couta;输出的是数组a的首地址,而不是数组a的元素值。(3)字符数组定义:char =“字符串” ;(或=”字符串”;)字符数组str可以整体赋初值、整体输入和输出, 即:cinstr; 是正确的!coutstr;是以空格作为串输入的结束符。串函数:字符串长度函数strlen();字符串复制函数strcpy();字符串连接函数strcat();字符串比较函数strcmp()。注意:在字符串运算符未重载之前,不能用赋值语句将一个字符串常量或字符数组赋给另一个字符数组,只能用字符串复制函数来处理。str=”字符串”;是错误的!两个字符串间也不能用

11、关系运算符进行比较,而只能用字符串比较函数来处理。if(str1str2) 是错误的!2007年(春)24.执行以下程序时,输入一行字符串为:Thank you very much!程序输出结果是: B #include void main(void) char line100; cinline; /cin输入 Thank you vrey much! 时,以空格为字符串的分隔符 coutlinen;int arrn;Dchar str=“I am student”;2011年(春)23.设有说明语句“char ss =“I am a student”;static float x20;”,以

12、下选项中,存在语法错误的是: D Acoutss;Ccoutx;/不能用cin输入数组x4、函数()(1)定义:类型 () 函数体 (2)调用:()函数调用方式:函数调用语句、函数表达式、函数参数。(3)传送1)传值:当形参为变量,实参为表达式值时,在函数调用过程中,实参值传给形参,函数执行过程中均为形参参与运算,函数返回时,实参保持原来的值不变。2)传地址:当形参为数组、指针,而实参为数组名、指针、&变量时,在函数调用过程,将实参地址传递给形参,使实参与形参占用相同单元,实参与形参同时发生变化。3)引用传送:当形参为引用变量,实参为变量时,形参为实参的别名,因此,在函数执行过程中,实参与形参

13、同时发生变化。(4)返回:return ; 或: return ();函数中允许写多条return语句,或不写return语句;函数执行到return语句时,将表达式值返回给主调函数,并终止本函数的执行。因此,函数的类型应与表达式的类型一致,并最多只会执行一条return语句。当函数没用return 语句返回值时,函数类型应为void。(5)原型说明当函数调用在前、定义在后时,应在调用前增加对被调函数的原型说明。原型说明格式: ();或 ();在函数原型说明中,可只写形参的数据类型,而省略形参名。(6)函数的嵌套调用和递归调用1)嵌套调用:被调用函数中调用另一个函数。2)递归调用:直接或间接地

14、调用函数本身。利用递归方法解决问题时,必须注意三点:递归的公式、递归的结束条件、递归的限制条件。(7)变量存储类型1)作用域块作用域:从块内变量定义开始到块结束;文件作用域:从函数外变量定义开始到文件结束(可用extern进行扩展);函数原型作用域:从原型变量定义开始到函数原型说明结束;函数作用域:从函数开始到函数结束;类作用域:从类定义开始到类定义结束。2)局部与全局变量局部变量是在函数内部定义或在块内定义的变量。局部变量都具有块作用域。全局变量是在函数外定义的变量。全局变量具有文件作用域。当局部变量与全局变量同名时,局部变量优先。在块作用域内可通过作用域运算符“:”来引用与局部变量同名的全

15、局变量。全局变量的默认初值为0。3)静态与动态变量动态变量是在程序的执行过程中为其分配内存的变量。静态变量是在程序开始执行时就为其分配内存,直到程序执行结束时,才收回内存的变量。静态变量的默认初值为0。4)变量的存储类型存储类型全局、局部变量作用域静、动态变量auto(自动)局部变量块作用域动态变量register(寄存器)局部变量块作用域动态变量static(静态)局部变量块作用域静态变量全局变量文件作用域静态变量extern(外部)全局变量文件作用域静态变量(7)具有默认参数值的函数(给形参指定默认值)指定默认值的形参必须从形参表的右边开始写。在调用函数时,若明确给出了实参的值,则使用相应

16、实参的值;若没有给出相应实参的值,则使用默认的值。(8)函数重载:用重名函数完成不同功能的函数运算重载函数形参必须不同,即或者参数个数不同或者数据类型不同,但返回类型可以相同。2007年(春)23.设有函数原型说明:void test(int a,int =7,char *=”#”); /具有默认值的形参必须从右边开始写下面的函数调用中,存在语法错误的是 C Atest(3)Btest(3,8.2)Ctest(6,”*”) /原型说明等价于void test(int a,int b=7,char *p=”#”); 实参“*”不能传送给bDtest(0,0,”*”)2010年(春)23. 以下关

17、于函数的叙述中,正确的是: C A函数必须返回一个值。/void 类型函数可以没有返回值B函数体中必须有return语句。C函数可以多次重载。D函数可以嵌套定义。 /函数可以嵌套调用,但不能嵌套定义2010年(秋)4、为使函数不返回任何值,定义函数时应在函数名前加保留字(关键字) void 。5、C+存储类型的四种说明符分别是auto、static、extern和 register 。2011年(春)24.设有说明语句“float f(int &a,int b);int x,y;”,以下对函数f的调用语句正确的是: A Af(x,y);/引用类型的形参int &a只能赋变量值x,即int &a

18、=x;Bf(&x,y);Cf(15,20);Df(*x,y);3、在定义全局和静态变量时,若没有设置其初值,则这两种变量的初始值为 0 。2012年(春)27. C+中,函数重载是指两个或两个以上的函数,其函数名: C A不同,但形参的个数或类型相同B相同,但返回值的类型不同C相同,但形参的个数或类型不同 /正确D相同,但必定是形参的个数相同且其类型不同30.有关函数调用的描述中,不正确的是: C A函数调用语句可实现任何函数的调用B一个函数调用可作为另一函数调用的实参C函数调用均可出现在表达式中 void print () main() int x=1,y; y=x+print(); /出错

19、D函数之间允许嵌套调用3、C+语言规定,所有函数说明都必须返回值类型,没有返回值的函数应该说明为 void 类型的函数。5、宏定义宏定义是用一个宏名来代表一个字符串。(1)无参宏定义:#define 字符串(2)带参宏定义:#define (参数表) 字符串宏定义可以写在函数的任意位置。2010年(秋)2、定义了宏“# define F(x,y,z) x/y*z”,执行语句“b=F(3+4,2+2,4+4);”后变量b的值是b=3+4/2+2*4+4=3+2+8+4=172006年(秋)22下列定义变量与常量的语句中,语法正确的是: C A float i,j,int k; / float i

20、,j ;int k;B const int i; /书p186,const常量必须赋初值C. int const k=1;D#define PI=3.14159 /#define 字符串 (书P142)2012年(春)24.以下有关C+宏定义的说明中,不正确的是:(B)A是以#开头的行B一行中可以存在一条以上的宏定义 /C+规定,一行只能写一条宏定义C一条宏定义占一行D宏定义可放在函数内,也可以放在函数定义之外6、指针指针是变量、数组、字符串、函数等在内存的地址;指针变量是存放指针(地址)的变量;当指针变量赋NULL或 0时,表示指针变量不指向任何变量。指针变量按定义格式大致可分为五种:l 指

21、针变量:int *p; /可指向变量、数组与字符串l 指针数组:int *pN;l 指向一维数组的指针变量:int (*p)N;l 返回指针值的函数:int *p(int x);l 函数指针变量:int (*p)(int x);a0a1a2aian-1pp+i(1)指针变量1)定义: * ;2)赋值:=&;3)指针变量的引用:*;int a10,* p=a; p+;/使p指向a1,p+i;/使p指向ai。4)一维数组an元素值:ai、*(p+i)、*(a+i)、pi。a0aia2a00a01a02ai0ai1ai2a20a21a22 5)二维数组amn:行首地址、行地址与元素地址。第i行首地址

22、:&ai0、ai、*(a+i)第i行行地址:a+i、&ai,用于指向一维数组的指针变量。元素aij值:aij、*(ai+j) 、 *(*(a+i)+j) 、 *(&ai0+j)。6)字符数组snchar s = I am a Student,*p;cinp; /错误,指针变量在未赋数组地址前,不能进行cin操作p=s; /正确cinp; /正确,指针变量在赋数组地址后,可以进行cin操作 p=I am a Student;/正确,可将字符串赋给指针变量。7)数组与指针作为函数参数l 实参=数组名,形参=数组。l 实参=数组名,形参=指针变量。l 实参=指针变量,形参=数组。l 实参=指针变量,

23、形参=指针变量。(2)指针数组: *;例如: char c3 4= ABC,DEF,GHI; char *pc3 =c0,c1,c2;(3)指向一维数组的指针变量:用于处理二维数组的运算问题。 (*); int a33,(*p)3=a; 或 p=a+0; (*p)0、(*p)1、(*p)2=a00、a01、a02。p+; (*p)0、(*p)1、(*p)2=a10、a11、a12。由此可见,只要用算术运算改变p所指的行,则(*p)0、(*p)1、(*p)2可以表示数组a的任一行元素值。因此,指向一维数组的指针变量可用于处理二维数组的运算问题。注意:在定义语句中的“数组列数”必须与所指向的二维数

24、组的列数相同。(4)返回指针值的函数: *() (5)函数指针变量:用于存放函数指针的变量,也即存放函数入口地址的变量。定义: (*) ();在实际使用时,必须将真实的函数入口地址赋给函数指针变量。此时对函数指针变量的调用就变成了对真实函数的调用。如:float f1(float x) return 1+x; main() float (*p)(float x); p=f1; coutp(1)endl; /等同于coutf1(1)endl; (6)new运算符:动态地分配内存空间,并将分配内存的地址赋给指针变量。 *p=new (初值); /动态分配变量内存空间,并将变量地址赋给指针p *p=

25、new 长度;/动态分配数组内存空间,并将数组首地址赋给指针p(7)delete 运算符:将动态分配的内存空间归还给系统。delete p; /动态回收p所指变量占用内存空间delete p;/动态回收p所指数组占用内存空间(8)const 常量:定义常量const =; /用const定义的常量必须赋初值,且不能修改。或 const =; 2007年(春)27.设有以下语句:int a=5;int arra; /第1行const int b=5;int xb;/第2行int c=5;int *p=new int c;/第3行const int d=5;int *p1=new int d; /

26、第4行其中存在语法错误的是: A A第1行 /定义数组arra时,不能用变量a作为数组长度,书P73B第2行/常量b可以作为定义数组arrb时的长度,书P186C第3行/用new动态分配数组内存时,长度可以是变量,书P182D第4行/用new动态分配数组内存时,长度可以是常量,书P1823、要使一个指针不指向任一变量,应将该指针变量的值赋为 0或NULL 。2010年(春)22以下语句中,存在编译错误的是 A Achar a7,*p; p=a=”china”;/字符数组a不能进行字符串赋运算(书P165)Bchar a7,*p; p=a;p=”china”;Cchar *a;a=”china”

27、;Dchar a7=”china”;2010年(秋)22设有说明语句“int hh4=2,3,4,*p=hh;”,则以下选取项中,存在语法错误的是 B a0a1a2a3an-1p1p2Ap+;/p指向hh1Bhh+; /数组名表示数组首地址,不能加1C(*p)+;/(*p)+=hh0+=3D(*hh)+;/(*hh)+= hh0+=330.以下关于指针运算的叙述中,不正确的是: D A可以将NULL赋给任一指针变量。B两个同类型的指针变量可进行相等或不等的比较运算。C指针变量的值加上整常数n,可使该指针指向当前元素后的第n个元素。D指向同一数组的两个指针变量,在任何情况下,两指针变量相减都是无

28、意义的。/相减后为两个指针变量所指单元序号之差,p2-p1=3。2012年(春)29.以下有关指针变量的运算中,不正确的是: D A一个指针变量可以加减一个整数B两个指针变量在一定条件下可进行关系运算C可将NULL赋给任一指针变量D两个指针变量可进行加法运算 /两个指针变量只能进行关系运算,不能进行加法运算1、在C+中,* 既是单目运算符,又是双目运算符。* 作为单目运算符时,其功能是 指针运算,作为双目运算符时,其功能是 乘法运算 7、类与对象()(1)类:由描述事物的数据(数据成员)及处理数据的函数(成员函数)组成。class public: /定义公有数据成员或成员函数(类内外均可访问)

29、, private: /定义私有数据成员或成员函数(只能在类内访问) protected: /定义保护数据成员或成员函数(只能在类内或派生类内访问) 默认访问权限为:private。特性:类具有封装性、继承性与多态性。(2)对象:用类定义的变量称为对象。(3)引用类内对象成员引用:成员,或this-成员类外对象成员引用:对象.成员 (4)构造函数作用:构造函数用于对象数据成员的初始化。特点:构造函数名必须与类名相同,且无返回类型,构造函数允许重载。缺省构造函数:是无参或有缺省值参数的构造函数。类型:有参构造函数、无参构造函数与拷贝构造函数。拷贝构造函数的形参必须为类的对象。(5)析造函数1)作

30、用:完成撤消对象有关操作。2)特点:析造函数名由类名前加“”组成,且无参数及返回类型,不允许重载,惟一。(6)构造与析构函数的调用用类定义对象时,系统先为其分配内存空间,然后自动调用构造函数对数据成员进行初始化。当对象结束其生命期,系统自动调用析构函数,完成撤消对象有关操作。(7)构造函数与对象成员:(形参):(实参1),(实参2),(实参n)函数体构造函数调用顺序:先调用各对象成员的构造函数,再调用类本身的构造函数。析构函数调用顺序:与构造函数相反。(8)this指针用类定义一个对象时,由系统自动建立指向该对象的指针称为this指针。this 指针的缺省定义格式: * const this=

31、& 对象;因为静态数据成员与静态成员函数只属于类,而不属于对象,所以静态数据成员与静态成员函数没有this指针。2007年(春)2、面向对象程序设计的三大特点是封装性、继承性和 多态性 。书P3025、在C+中,类的每一个非静态成员函数都有一个 this 指针,该指针指向正在调用成员函数的对象。2010年(春)27. 对于任意一个类,其析构函数 A A是惟一的。B可有多个。C只能是缺省的。D允许重载。28. 类成员函数中,没有this指针的是: D A构造函数。B析构函数。C虚函数。D静态成员函数。/静态成员函数为类中所有对象所共有2010年(秋)27.下列关于构造函数的叙述中,不正确的是 A

32、 A可以定义没有构造函数的类。B任何一个类必定有构造函数。C类的构造函数可以重载。D构造函数没有返回值。29.以下有关类与对象的叙述中,不正确的是: A A不同的类可以产生相同类型的对象。 /对象是用类定义的变量,/所以不同类定义的对象类型不会相同B类是一种类型,它定义了数据和操作。C对象是类的实例。D任一对象必属于一个类。2012年(春)25.以下有关C+析构函数的叙述中,不正确的是: D A析构函数名必须以“”开头B不可以定义析构函数的形式参数C析构函数由系统自动调用D可以重载析构函数/析构函数名=类名、无形参、无返回类型(惟一),不能重载8、继承、派生与虚基类()(1)继承:从已有类出发

33、建立新类,使新类部分或全部地继承已有类的成员称为继承。(2)派生:通过继承已有一个或多个类产生新类称为派生。(3)定义:class :,派生类体;(4)公有或私有派生后,基类成员在派生类中访问权限的变化基类成员访问权限 公有派生后的访问权限 私有派生后的访问权限publicpublicprivateprivate不可直接访问不可直接访问protectedprivateprivate(5)派生类构造函数(形参表):(实参表1)(实参表n) ;构造函数的调用顺序是先基类后派生类,析构函数的调用顺序是先派生类后基类。(6)冲突:派生类使用基类中同名成员时出现不唯一称为冲突。冲突的解决方法::(7)支

34、配规则:使用派生类中与基类中同名成员时,派生类成员优于基类同名成员的规则称为支配规则。(8)兼容性:派生类对象可赋值给基类对象,基类对象不能赋给派生类对象称为赋值的兼容性。(9)虚基类:在多重派生中,欲使公共基类在派生类中只有一个拷贝,可将此基类说明成虚基类。此时,在执行派生类构造函数时,不再通过其父类调用公共基类构造函数。可以解决二义性问题!class :virtual ; (10)静态成员类内作引用性说明:static 数据成员; /不分配内存类外作定义性说明: :=初值;/分配内存引用格式::由于同类不同对象的静态数据成员占用相同的内存空间,所以其使用方式只与类有关即::,而与对象无关。

35、2007年(春)26. 定义以下的类:class X int a; public:X(int x=0) a=x; ;class Y:public Xint b;public:Y(int x=0,int y=0):X(y)b=x;在下列选项的说明语句中,存在语法错误的是: C AX *pa=new Y(1,2);BX a1=Y(1,3);CX b2(2,3);Y &a2=b2; /类X的构造函数只有一个形参,与两个实参不匹配。DY b3(10); X a3(b3);2010年(春)29.以下有关继承的的叙述中,不正确的是: C A继承可以实现软件复用。/节省编程量。B虚基类可以解决多继承产生的二

36、义性问题。C派生类不继承基类的私有成员。D派生类的构造函数要调用基类的构造函数。30. 静态数据成员是 D 的数据。A私有B公有C保护D所有对象共享2011年(春)30.以下关于this指针的叙述中,不正确的是: D A当调用对象的非静态成员时,总存在一个this指针。B非静态成员函数调用类中的成员时,可直接使用this指针。Cthis指针隐含地指向要用到的当前对象。D静态成员函数也存在this指针。/C+为类的每个对象定义this指针,而静态成员为类的所有对象所共有,所以不存在this指针。2、在C+中,类的继承方式有三种:保护继承、私有继承和 公有继承 。2012年(春)26.以下C+静态

37、数据成员的描述中,正确的是: D A静态数据成员不能被成员函数调用B静态数据成员要在构造函数内初始化C静态数据成员必须为公有的D静态数据成员为该类的所有对象所共有 /C+规定静态数据成员为该类所有对象所共有28.以下有关继承的叙述中,正确的是: A A派生类继承基类的所有成员B派生类继承基类的所有非私有成员C派生类不继承基类的析构函数D虚函数不能解决多继承产生的二义性9、运算符重载、多态性与虚函数()(1)友元概念类的友元可访问类中所有数据成员或成员函数,虽然友元方便了用户,但破坏了数据的安全性。(2)友元定义类内引用说明( friend (形参);),类外定义性说明。(3)运算符重载l 运算

38、符重载是指用同一运算符完成不同的运算操作;l 运算符重载是通过运算符重载函数来实现的;l 运算符重载不能改变操作数的个数、不能改变运算符的优先级和结合性。(4)二元运算符重载函数用成员函数重载运算符定义::(对象) 函数体调用:;C+将运算符操作解释为对运算符成员重载函数的调用:.(右操作数对象);如:Complex operator +(Complex c) Complex t; t.Real=Real+c.Real; t.Image=Image+c.Image; return t; c3=c1+c2;/c3=c1.operator+(c2)用友元函数重载运算符类内定义:friend (对象

39、1,对象2);类外定义:(对象1,对象2) 函数体。调用: ;C+将运算符操作解释为对运算符友元重载函数的调用:(左操作数对象,右操作数对象);如:Complex operator +(Complex c1,Complex c2) Complex t; t.Real=c1.Real+c2.Real; t.Image=c1.Image+c2.Image; return t; c3=c1+c2;/c3=operator+(c1,c2)(5)一元运算符重载函数用成员函数重载“+”运算符前置+::()后置+::(int)用友元函数重载“+”运算符前置+:friend :( 类名 &)后置+:frien

40、d :(类名&,int)其中形参中的int 只用于区别前置+重载函数,还是后置+重载函数。对于前置+成员函数,必须用this指针返回自加结果。(6)字符串运算符重载函数使用字符串运算符重载函数,可使字符串拷贝、拼接、比较等操作直接用字符串运算符“=”、“+”、“”、“”来进行。字符串常进行二元运算,其重载函数的定义格式与二元运算符重载函数相同。(7)多态性技术多态性技术是指调用同名函数完成不同的函数功能,或使用同名运算符完成不同的运算功能。分为:编译时的多态性(静态多态性):函数重载或运算符重载;运行时的多态性(动态多态性):虚函数;(8)虚函数用虚函数实现“运行时的多态性”的方法是:l 在基

41、类中定义虚函数virtual (参数)函数体l 在派生类中定义与基类虚函数同名同参数同返回类型的虚函数, (参数)函数体nl 用基类定义指针变量p,将基类或派生类对象的地址赋给p(即p=&对象),l 用p-虚函数,则可实现“运行时的多态性”。class High virtual void Show()/在基类中定义虚函数Show() coutHigh=Hendl;class Cuboid:public High void Show()/在长方体派生类中定义虚函数Show() coutCuboid Volume=Length*Width*Hendl; ;class Cylinder:public

42、 High void Show() coutCylinder Volume=R*R*3.141*HShow(); / High=10 p=&cu; p-Show();/ Cuboid Volume=100 p=&cy; p-Show();/ Cylinder Volume=3141虚函数实现了运行时的多态性!注意:l 若派生类中没有定义虚函数,将派生类对象地址赋给基类定义的指针变量后,用指针变量虚函数(实参);方式去调用的虚函数时,调用的虚函数是基类的虚函数。class Cuboid:public High void Show(int t)/ Show(int i)不构成虚函数 coutCub

43、oid Volume=Length*Width*HShow(); / High=10,调用基类虚函数l 构造函数不能定义为虚函数,析构函数可以定义为虚函数。(9)纯虚函数将函数名赋0值且无函数体的虚函数称为纯虚函数,定义格式为:virtual (参数)=0;含有纯虚函数的类称为抽象类,不能用抽象类定义对象。因为纯虚函数无函数体,所以纯虚函数不能调用,因此必须在派生类中重新定义虚函数。2007年(春)25.下列关于运算符重载的叙述中,正确的是: D A运算符重载可以改变操作数的个数。B运算符重载可以改变运算符的优先级。C运算符重载可以改变运算符的结合性。D运算符重载不能改变操作数的个数、不能改变

44、运算符的优先级和结合性。/书P284(6)29.下列关于虚函数的描述中,正确的是: D A虚函数可以是一个static类型的成员函数。B虚函数可以是一个非成员函数。C虚函数实现静态多态性。D基类中采用virtual说明一个虚函数后,派生类中定义相同原型的虚函数时,可不必加virtual说明。书P299(1)2010年(春)25.实现运行时的多态性需要使用 D A重载函数。B析构函数。C构造函数。D虚函数。 /书P29826. 以下有关成员的描述中,正确的是 B A友元函数是类的成员函数。 /友元函数是普通函数B类成员缺省的访问权限是私有的。C类成员必须说明为公有的。D派生类成员函数能访问其基类

45、的所有成员。/不能访问私有成员1、在C+中,将多态性分为静态多态性和动态多态性两种。函数重载属于 静态 多态性,运算符重载属于能 静态 多态性。2、在C+的文件流中,打开文件的方法有两种:一种是使用成员函数open()打开文件,另一种是使用 构造函数 打开文件。4、当用类的成员函数重载一个双目运算符时,该成员函数的形参个数是 1 。2010年(秋)25.以下有关运行符重载的叙述中,正确的是: D AC+已有的任何运行符都可以重载。B可以重载C+中没有的运行符。C运算符重载可改变其优先级。D运算符重载可以改变其实现的功能。 /如“+”运算符重载后可以实现复数相加,/字符串连接等运算28. 下列有

46、关类成员的叙述中,不正确的是: C A当不指定类成员的访问权限时则为私有成员。B友元函数可以访问类中的任一成员。C指定为public的成员不允许在类外访问。/public为公有成员,允许类外访问D成员函数可访问类中任一成员。1、每一个类均有构造函数和析构函数,这两个函数中不可以定义为虚函数的是 构造函数 。3、函数重载和运算符重载实现的多态性属于 静态 多态性。2011年(春)28.用友元函数进行双目运算符重载时,该友元函数的参数表中应定义 C 个参数。A0B1C2D329.以下有关抽象类的叙述中,正确的是: C A抽象类不能含有纯虚函数。B可以定义抽象类的对象。C在抽象类中至少含有一个没有函

47、数体的虚函数。D抽象类不能作为基类派生出新的类。1、成员函数实现双目运算符重载时,该运算符的左操作数是 当前对象(调用重载函数的对象) ,右操作数是 重载函数的形参 。2012年(春)22以下关于虚函数的叙述中,正确的是: C A虚函数的类不可作为类的基类。 /虚函数的类可以定义为基类B可以不定义虚函数的函数体。 /虚函数必须定义函数体,只有纯虚函数不定义函数体C可以定义含有虚函数的类的对象。/正确D不可以定义含有虚函数的类的指针。/可以定义含有虚函数的类的指针,/如用基类定义指针2、在类的派生过程中,将基类说明为虚基类的方法是在基类的类名前加上关键字 virtual 二、读程序题读程序题大致可以分为4类:函数调用、函数递归、字符串运算、类与对象。1、函数调用(1)在函数调用中,当形参为变量、指针变量、数组、引用变量,实参为变量、变量地址、数组名、变量时,采用的传送方式分别为:传值:实参不会变传地址:实参返回形参的运算结果引用传送:实参返回形参的运算结果2010年(秋)7、程序(2分)# include f(a=5,b=11,*c=16) a=a+b=5+11=16 b=b+*c=11+16=27

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!