1、A、内联函数在调用时发生控制转移B、内联函数必须通过关键字inline来定义C、内联函数是通过编译器来实现的D、内联函数函数体的最后一条语句必须是return语句 A、int*p;P=&k;B、int*P;P=k;C、int*p;*P=&k;D、int*p;*P=k;A、BAAABA全真机考、在线考试、每日一练、评估报告,最专业全面的题库,尽在233网校题库!http:/ namespace std;class Apublic:A()cout”A”;-A()cout”-A”;class B:public AA*P;public:B()cout”B”;P=new A();-B()cout”B”;
2、delete p;int main()B obj;return 0;执行这个程序的输出结果是()。答案:C解析:一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换,所以在调用时不发生控制转移。在类内部实现的函数都是内联函数,可以不用inline定义;只有函数外部定义的内联函数才必须加关键字inline。编译系统并非对内联函数必须使用内联,而且根据具体情况决定。内联函数不是必须要有返回值的。答案:A解析:本题考查指针和地址,题目中定义了一个指向变量k的一个指针p,那么与题目中等效的表达式A选项,即先定义一个指向整型
3、的指针,然后指向k的地址。B、ABABAAC、BAABAAD、ABAABAA、B、C、D、A、Data+(DatA;B、Data operator+(DatA;C、Data+operator(DatA;D、operator+(Data,DatA;A、num10B、num5C、num3D、humoA、DeCr&operator-(int);B、DeCr operator-(DeCr&,int);C、friend DeCr&operator-(DeCr&);D、friend DeCr operator-(DeCr&,int);4、有如下类定义:class AAim a:public:int get
4、Ref()constreturna;/int getValue()constreturn a;/void set(int n)consta=n;/friend void show(AA aAconstcouta;/;其中四个函数的定义中正确的是()。5、若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是()。6、有如下数组声明:int num10;,下标值引用错误的是()。7、将前缀运算符“-”重载为非成员函数,下列原型中能正确用于类中说明的是()。答案:B解析:本题考查派生类的构造函数和析构函数,在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数。
5、对象释放时,先执行派生类的析构函数,再执行基类的析构函数。所以本题答案为B。答案:B解析:本题考查常成员函数,常成员函数只能引用本类中的数据成员,而不能修改它。所以本题答案为B。答案:B解析:根据重载加法运算符的格式,只有B选项正确。答案:A解析:数组定义中的数字指的是数组的大小,而下标是从0开始的,所以本题中数组的最后一个元素是num9。答案:CA、publiC和publiCB、publiC和proteCtedC、proteCted和publiCD、proteCted和proteCtedA、autoB、externC、registerD、staticA、0B、1C、2D、3A、程序内部逻辑B
6、、程序外部功能C、程序数据结构D、程序流程图 8、如果派生类以proteCted方式继承基类,则原基类的proteCted成员和publiC成员在派生类中的访问属性分别是()。9、在函数中,可以用aut0、extem、register和static这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的存储类型是()。10、下列程序的输出结果是()。#includeint rain(iltl a,int B)if(aBreturn a;else retum b;retum 0;void main()eoutmin(1,min(2,3)endl;11、在黑盒测试方法中,设计测试用例
7、的主要根据是()。答案:C解析:把“-”运算符重载为非成员(友元)函数格式:friendoperator-()是前缀的格式;friendoperator-(int)是后缀的格式。当然也可以有参数如题中C选项所示。答案:D解析:本题考查保护继承中派生类对基类的访问属性,在受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有,所以本题答案为D。答案:A解析:变量的存储方法分为静态存储和动态存储两大类,包含4种:自动的(auto)、静态的(static)、寄存器的(register)、外部的(extem)。变量如果没有说明存储类型,那么默认就是aut0。答案:B解析:
8、本题考查的是函数的调用,第一次调用min(2,3),因为23,所以返回值为2,第二次调用min(1,2),因为l2,所以返回1。答案:BA、一致性B、分类性C、多态性D、标识唯一性A、30,20,10B、10,20,30C、456,567,678D、678,567,456A、构造函数可以重载,析构函数不能重载B、构造函数不能重载,析构函数可以重载C、构造函数可以重载,析构函数也可以重载D、构造函数不能重载,析构函数也不能重裁 A、操作数类型B、操作数个数C、优先级D、结合性 12、在面向对象方法中,不属于“对象”基本特点的是()。13、有以下程序:#includevoid fun(int a,
9、int b,int C a=456,b=567,c=678;void main()int X=10,Y=20,Z=30;fun(X,Y,z);aoutx,Y,zA表达式可输出字符AB、eof()函数可以检测是否到达文件尾C、对磁盘文件进行流操作时,必须包含头文件fstreamD、以ios_base:0ut模式打开的文件不存在时,将自动建立一个新文件A、提高耦合性降低内聚性有利于提高模块的独立性B、降低耦合性提高内聚性有利于提高模块的独立性C、耦合性是指一个模块内部各个元素间彼此结合的紧密程度D、内聚性是指模块间互相连接的紧密程度 A、11B、111C、1111D、11111A、template
10、T abs(T X)return x07-x:X;B、template ClassT abs(T x)return x07-X:x;C、template Tabs(T X)return x07-x:X;D、template T abs(T x)return X0?-X:x;16、下列关于c+流的描述中,错误的是()。17、耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是()。18、若有如下类声明:Class MyClass publiC:MyClass()Cout1;执行下列语句 MyClass a,b2,*p2;程序的输出结果是()。19、下列函数模板的定义中,合法的是()。2
11、0、有如下程序:#includeusing namespace std;class Baseint x:定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是c+的标准类型。故本题答案为A。答案:A解析:本题考查c+流,想要输出字符“A”,则应该是cout“A”,所以本题答案为A。答案:B解析:模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。一般较优秀的软件设计,应尽量做到高内聚、低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性,所以A错误,B正确。耦合性是模块间互相连接的紧密程度的度量而内聚性是指一个模块内部
12、各个元素间彼此结合的紧密程度,所以C与D错误。答案:B解析:本题考查默认构造函数和带参数的构造函数,题目中定义一一个对象a以及对象数组b2,共执行3次构造函数,对象指针不调用构造函数。所以本题答案为B。答案:A解析:本题考查模板函数的基本概念根据模板函数的定义,所以答案为A。A、375B、357C、0375D、0557A、对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略B、对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略C、对于虚拟类型参数所对应的模板实参,若能够省略则必须省略D、对于常规参数所对应的模板实参,任何情况下
13、都不能省略 A、B、C、D、public:Base(int n=0):x(n)coutn;int getX()constreturn x;cjass Derived:public Baseint Y:J;Iublic:Derived(int m,int n):y(m),Base(n)coutm;Derived(int m):Y(m)coutm;int main()Derived dl(3),d2(5,7);retum 0;执行这个程序的输出结果是()。21、关于在调用模板函数时模板实参的使用,下列表述中正确的是()。22、有如下程序段:int i=0,J=1;int&r=i;/r=j;/int
14、*P=&i;/*P=r;/其中会产生编译错误的语句是()。答案:C解析:本题考查派生类的构造函数和析构函数,在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数,对象释放时,先执行派生类的析构函数。再执行基类的析构函数。本题中定义了一个对象d1,先执行基类的构造函数输出0,再执行派生类的构造函数输出3,然后定义了一个对象d2(5,7),其中需要调用基类的构造函数输出7最后输出5,所以答案为c。答案:D解析:在调用一个模板函数时,编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型,可以从两个不同的渠道获得这样的信息:从模板实参表(用“”括起来的参数表)或从模板函数
15、实参表(用“()”括起来的参数表)。如果从后者获得的信息已经能够判定其中部分或全部虚拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的若干参数,则模板实参表中的那几个参数可以省略。如果模板实参表中的实参都被省略了,则空表“”也可以不要,因此选项D错误。反之,对于某个模板实参,如果从模板函数的实参表中无法获得同样的信息,就不能省略;或者虽然能够获得同样的信息,但在它后面还有其他不能省略的实参,则其自身还是不能省略。答案:A解析:本题考查指针和引用。为引用,使用正确;中r表示一一个地址,而*P已经是一个值了,不能将一个指针赋值给一个值,所以编译错A、232B、231C、222D、221A、
16、函数9etK试图访问基类的私有成员变量kB、在类MyDerived的定义中,基类名MyBase前缺少关键字public、protected或privateC、类MyDerived缺少一个无参的构造函数D、类MyDerived的构造函数没有对基类数据成员k进行初始化 23、有如下程序:#includeusing namespace std;class Objstatic int i;public:Obj()i+;一Obj()i一一;static int getVal()return i;int Obj:i=0:void f()Obj ob2;coutob2getVal();int main()O
17、bj obl;f();Objob3=new Obj;coutgetVal();delete ob3;coutObj:getVal();return 0;执行这个程序的输出结果是()。24、有如下类定义:class MyBaseint k;public:MyBase(int n=O):k(n)int value()eonstreturn k;class MyDerived:MyBaseintj;public:MyDerived(int i):j(i)int getK()constreturn k;int getJ()constreturn j;编译时发现有一处语法错误,对这个错误最准确的描述是(
18、)。误。答案:D解析:本题考查构造函数和析构函数的调用顺序,调用顺序为先构造的后析构,后构造的先析构。本题中先定义了一个对象ob1,会执行构造函数,那么i就变为了l;再执行函数f后,由于又定义了一个对象ob2,所以再次执行构造函数,i就变为了2,输出了2。函数执行完后执行析构函数,i变为了1,然后又定义了对象指针,i变为了2。释放ob3后,i变为了1,所以答案为D。答案:AA、设置虚基类的目的是为了消除二义性B、虚基类的构造函数在非虚基类之后调用C、若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用D、若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数
19、 A、O(n)B、O(n2)C、O(1092n)D、0(n1092n)A、Ns图B、DFD图C、PAD图D、程序流程图A、xvalue+XgetAmount()B、xgetData()一xgetAmount()25、下列关于虚基类的描述,错误的是()。26、在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是()。27、在软件开发中,需求分析阶段可以使用的工具是()。28、有如下类声明:class Baseprotected:int amount;public:Base(int n=0):amount(n)int getAmount()constretum amount;class
20、 Derived:public Baseprotected:int value;public:Derived(int m,int n):value(m),Base(n)int getData()constreturn value+amount;:已知x是一个Derived对象,则下列表达式中正确的是()。解析:默认继承方式为私有继承,私有继承将基类的公用成员和保护成员都变为r私有成员,基类的私有成员依然属于基类私有,派生类不能访问基类的私有成员。所以A选项正确。答案:B解析:虚基类的引入就是为j-消除。二义性,其构造函数的调用仍然是按照继承的顺序进行的,对于多个虚基类则按它们说明的次序调用,虚
21、基类的构造函数先于非虚基类的构造函数执行。答案:C解析:当有序线性表为顺序存储时才能用:二分法查找。可以证明的是对于长度为n的有序线性表,在最坏情况下,二分法查找只需要比较l092n次,而顺序查找需要比较n次。答案:B解析:在需求分析阶段可以使用的工具有数据流图DFD图,数据字典DD,判定树与判定表,所以选择B。C、xgetData()一xamountD、xvalue+XamountA、自然连接B、交C、除D、并 A、软件过程不规范B、软件开发生产率低C、软件质量难以控制D、软件成本不断提高 A、CCCCB、CCCC、CCD、C29、有三个关系R、S和T如下:则由关系R和s得到关系T的操作是(
22、)。30、下面描述中,不属于软件危机表现的是()。31、有如下程序:#inClude using namespaCe std:Class CDpubliC:CD()CoutC:private:Char name80;int main()CD a,*b,d2;return 0;执行这个程序的输出结果是()。32、类的析构函数是在()调用的。答案:B解析:本题考查公有继承中派生类对象对基类的访问属性。在公有继承中,派生类对象只能访问基类的公有成员,而不能方问基类的保护成员和私有成员。题中x是派生类的对象,只能访问基类中公有的Base()和getAmount()成员,而不能访问保护类型的amount
23、成员,故选项C、D错误。而类对象对类成员的访问也存在类似的情况,即类对象只能访问类的公有成员,而value是Derived的保护成员,所以A选项也错误。故答案为B。答案:C解析:如果S=T/R,则S称为T除以R的商在除运算中s的域由T中那些不出现在R中的域所组成,对于s中的任一序组,由它与关系R中每个有序组所构成的有序组均出现在关系T中。所以本题选择C。答案:A解析:软件危机主要表现在:软件需求的增长得不到满足;软件开发成本和进度无法控制;软件质撼难以保证;软件不可维护或维护程度非常低;软件的成本不断提高;软件开发生产率的提高赶不上硬件的发展和应用需求的增长。所以选择A。答案:B解析:本题考查
24、类的析构函数题目中定义了类的一个对象a,对象指针*b,对象数组d2,当程序执行完后,析构函数执行了3次,输出“CCC”,对象指针不会执行析构函数。所以本题答案为8。A、类创建时B、创建对象时C、删除对象时D、不自动调用 A、c+语言中的多态性分为编译时的多态性和运行时的多态性B、编译时的多态性可通过函数重载实现C、运行时的多态性可通过模板和虚函数实现D、实现运行时多态性的机制称为动态绑定 A、友元函数是类的成员函数B、类成员的默认访问权限是私有的C、类成员函数必须声明为公有的D、类的静态数据成员不能是常成员 A、10,2B、12,10C、12,2D、2,233、下列关于多态性的描述,错误的是(
25、)。34、下列有关类成员的叙述中,正确的是()。35、有如下程序:#inCludeusing namespaCe std;ClaSS ApubliC:A(int i)x=i;void dispa()Coutx,;private:int x;Class B:publiC A publiC:B(int i):A(i+10)x=i;vold dispb()dispa();Coutxendl;private:int x;int main()B b(2);bdispb();return 0;执行这个程序的输出结果是()。答案:C解析:析构函数可以被函数调用,也可以被系统调用:函数体内的对象在函数结束时调
26、用析构函数和使用delete释放对象所占用的资源。答案:C解析:编译时的多态性是通过函数重载和模板体实现的,运行时的多态性是通过虚函数体实现的。答案:B解析:友元函数是指某些虽然不是类成员却能访问类的所有成员的函数,故友元函数不足类的成员函数。类成员的默认访问权限是私有的,类的成员函数r以是3种权限中的一种,静态数据成员可以为常成员。故本题答案为8。答案:C解析:本题考查派生类的构造函数和基类的构造函数。本题中类B继承类A,定义了个类B的对象并初始化b(2),此时会执行类B的构造函数,执行的结果是继承类A中的私有成员赋值了12,给类B自身的数据成员x赋值了2,执行bdispb()后,输出类A的
27、私有成员x,输出类B自身的数据成员,所以答案为C。A、24B、25C、26D、50A、:a(n)B、:AA(n)C、a(n);D、a=n;A、a=c=A&(c=C|(z=a)&(c1;i一=2)tout*:37、有如下类定义:Class AA int a:PubliC:AA(int n=O):a(n);Class BB:publiC AA publiC:BB(int n);其中横线处的缺失部分是()。38、判断char型变量c是否为小写字母的正确表达式是()。39、决定c+语言中函数的返回值类型的是()。40、设int a=1,b=2;,则(a+)+b和a+b这两个表达式的值分别为()。答案:
28、B解析:本题考查for循环语句,题目中每执行完循环体后,i都会减2,那么只有50到2之间的偶数才能输出“*”,所以总共输出25次。答案:B解析:本题考查公用继承对基类成员的访问属性。公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有,本题中若要给派生类继承下来基类的私有成员赋值,那么只能调用基类的成员函数来对它赋值,成员变量默认的访问权限为私有,即a为私有变量。所以本题答案为B。答案:D解析:字符型数据在计算机内部是以ASCII码存储的,英文大写字母和小写字母在ASCII码表中都是连续的。大写字母Az是从6590,小写字母az是从97122。所以只要变量c大
29、于等于a并月小于等于z就能保证其为小写字母。答案:D解析:c+语言中,在定义该函数时所指定的数据类璎决定函数的返回值类型。二、基本操作题二、基本操作题(18分分)41、请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl。程序中位于每个“/ERROR*found料*之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:Name:Smith Age:21 ID:99999 CourseNum:12Record:970注意:只修改每个“/ERROR*found*”下的那一行,不要改动程序中的其他内容。#includeusing namespace std;class St
30、udentlnfoprotected:/ERROR*found*char Name;int Age;int ID:int CourseNum;float Record;public:Studentlnfo(char*name,int Age,int ID,int coumeNum,float record);/ERROR *found*voidStudentlnfo()float AverageRecord()return Record/CourseNum;void show()constcout”Name:”Name”Age:”Age”ID:”ID”CourseNum:”CourseNum”
31、Record:”RecordID=ID:CourseNum=courseNum:Record=record;int main()Studentlnfo st(Smith”,21,99999,12,970);stshow();return 0;(1)char*Name;(2)Studentlnfo()(3)Studentlnf0:Studentlnfo(char*name,int age,,int ID,int eourseNum,float record)三、简单应用题(三、简单应用题(24分)分)42、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,其中定义了veh
32、iele类,并派生出motorcar类和bicycle类。然后以motorcar和bicycle作为基类,再派生出motorcycle类。要求将Vehicle作为虚基类,避免二义性问题。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:801501001注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“/*found*”。#includeclass vehicleprivate:int MaxSpeed;int Weight;public:/*found*vehicle(int maxspeed,int weight):答案:A
33、解析:单目的+运算优先级高于双目的+运算,不过+的结合性是自右向左的,而+是自左向右的,所以上面的两个表达式都是先计算a+b的值之后,a再自加1。vehicle();int getMaxSpeed()return MaxSpeed;int getWeight()retum Weight;/*found*class bicycle:public vehicleprivate:int Height;public:bicycle(int maxspeed,int weight,int height):vehicle(maxspeed,weight),Height(height)int getHeig
34、ht()retum Height;/*found*class motorcar:public vehicleprivate:int SeatNum;public:motorcar(int maxspeed。int weight,int seatnum):vehicle(maxspeed,weight),SeatNum(seatnum)int getSeatNum()return SeatNum;/*found*class motorcycle:public:motorcycle(int maxspeed,int weight,int height):vehicle(maxspeed,weigh
35、t),bicycle(maxspeed,weight,height),motorcar(maxspeed,weight,1);void main()motorcycle a(80,150,100);coutagetMaxSpeed()endl;coutagetWeight()endl;coutagetHeight()endl;coutagetSeatNum()endl;(1)MaxSpeed(maxspeed),Weight(weight)f;(2)virtual(3)virtua1(4)public bicycle,public motorcar四、综合应用题(四、综合应用题(18分)分)4
36、3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程文件proj3。本题创建一个小型字符串类,字符串长度不超过l00。程序文件包括pmj3h、proj3cpp、writeToFileobj。补充完成重载赋值运算符函数,完成深复制功能。屏幕上输出的正确结果应该是:Hello!Happy new year!补充编制的内容写在“/*333*”与“/*666*”两行之间。不得修改程序的其他部分。注意:程序最后调用writeToFil。函数,使用另一组不同的测试数据,将不同的运行结果输出到文件0utdat中。输出函数writeToFile已经编译为obj文件。/proj3h#include
37、#includeusing namespace std;class MiniStringpubhc:friend。8tream&operator(oatream&output,const MiniString&s)/重载流插入运算符 output(istream&input,MiniString&8)/重载流提取运算符 char temp100;/用于输入的临时数组 temp0=0:/初始为空字符串 inputsetw(100)temp;int inLen=strlen(temp);/输入字符串长度 if(inLen!=0)s1ength=inLen;/赋长度 if(ssPtr!=0)dele
38、tessPtr;/避免内存泄漏 ssPtr=Hew chars1ength+1;strcpy(ssPtr,temp);/如果8不是空指针,则复制内容 else ssPtr0=0;/如果s是空指针,则为空字符串 retum input;void modString(const charstring2)/更改字符串内容 if(strin92 1=0)/如果strin92不是空指针,则复制内容 if(strlen(strin92)!=length)length=strlen(strin92);deletesPtr;sPtr=new char1ength+1;/分配内存 strcpy(sPtr,str
39、in92);else sPtr0=0;/如果string2是空指针,则为空字符串 MiniString&operator=f const MiniString&otherString);MiniString(corot char*s=):lengtll(s!=0)?strlen(s):0)/构造函数 sPtT=0:if(1ength=0)setString(S);MiniString()/析构函数 deletesPtr;private:int length;/字符串长度 char*sPtr;/指向字符串起始位置 void setString(const char*string2)/辅助函数 s
40、Ptr=Dew charstr|en(string2)+1;/分配内存 if(stnIl92!=0)strcpy(sPtr,string2);/如果string2不是空指针,则复制内容 else slur0=0;/如果string2是空指针,则为空字符串;/pwj3cpp#include#includeusing namespace std;#include”proj3h”MiniString&MiniStrin9:0perator=(const MiniString&otherString)/重载赋值运算符函数。提示:可以调用辅助函数setString/*333*/*666*int main
41、()MiniSuing strl(”Heuo!”),str2;void writeToFile(const char*);sir2=strl;/使用重载的赋值运算符 str2modString(Happy new year!);coutstrln:coutstr2n:writeToFile();return 0;length=otherString1ength;/把对象字符串0therString的长度赋值给变量length setString(otherStringsPtr);/调用函数setstring,实现给类变量sptr分配空间,以及逐个把对象0therstring字符串的值复制到sptr中 returnthis:/返回被赋值的对象