第 1 页:选择题 |
第 3 页:基本操作题 |
第 4 页:简单应用题 |
21关于在调用模板函数时模板实参的使用,下列表述中正确的是( )。
A.对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略
B.对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略
C.对于虚拟类型参数所对应的模板实参,若能够省略则必须省略
D.对于常规参数所对应的模板实参,任何情况下都不能省略
参考答案:D
参考解析:在调用一个模板函数时,编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型,可以从两个不同的渠道获得这样的信息:从模板实参表(用“<>”括起来的参数表)或从模板函数实参表(用“()”括起来的参数表)。如果从后者获得的信息已经能够判定其中部分或全部虚拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的若干参数,则模板实参表中的那几个参数可以省。如果模板实参表中的实参都被省了,则空表“<>”也可以不要,因此选项D错误。反之,对于某个模板实参,如果从模板函数的实参表中无法获得同样的信息,就不能省;或者虽然能够获得同样的信息,但在它后面还有其他不能省的实参,则其自身还是不能省。
22有如下程序段:
int i=0,J=1;
int&r=i;//①
r=j;//②
int*P=&i;//⑧
*P=&r;//④
其中会产生编译错误的语句是( )。
A.④B.③C.②D.①
参考答案:A
参考解析:本题考查指针和引用。①为引用,使用正确;④中&r表示一一个地址,而* P已经是一个值了,不能将一个指针赋值给一个值,所以编译错误。
23有如下程序:
#include
using namespace std;
class Obj{
static int i;
public:
Obj(){i++;}
一Obj(){i一一;}
static int getVal(){return i;}
};
int Obj::i=0:
void f(){Obj ob2;cout<
int main(){
Obj obl;
f();
Obj}ob3=new Obj;cout delete ob3;cout< return 0; } 执行这个程序的输出结果是( )。 A.232B.231C.222D.221 参考答案:D 参考解析:本题考查构造函数和析构函数的调用顺序,调用顺序为先构造的后析构,后构造的先析构。本题中先定义了一个对象ob1,会执行构造函数,那么i就变为了l;再执行函数f后,由于又定义了一个对象ob2,所以再次执行构造函数,i就变为了2,输出了2。函数执行完后执行析构函数,i变为了1,然后又定义了对象指针,i变为了2。释放ob3后,i变为了1,所以答案为D。 24有如下类定义: class MyBase{ int k; public: MyBase(int n=O):k(n)}} int value()eonst{return k;} }; class MyDerived:MyBase{ intj; public: MyDerived(int i):j(i)}} int getK()const{return k;} int getJ()const{return j;} }; 编译时发现有一处语法错误,对这个错误最准确的描述是( )。 A.函数9etK试图访问基类的私有成员变量k B.在类MyDerived的定义中,基类名MyBase前缺少关键字public、protected或private C.类MyDerived缺少一个无参的构造函数 D.类MyDerived的构造函数没有对基类数据成员k进行初始化 参考答案:A 参考解析:默认继承方式为私有继承,私有继承将基类的公用成员和保护成员都变为r私有成员,基类的私有成员依然属于基类私有,派生类不能访问基类的私有成员。所以A选项正确。 25下列关于虚基类的描述,错误的是( )。 A.设置虚基类的目的是为了消除二义性 B.虚基类的构造函数在非虚基类之后调用 C.若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用 D.若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数 参考答案:B 参考解析:虚基类的引入就是为j-消除。二义性,其构造函数的调用仍然是按照继承的顺序进行的,对于多个虚基类则按它们说明的次序调用,虚基类的构造函数先于非虚基类的构造函数执行。 26在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是( )。 A.O(n)B.O(n2)C.O(1092n)D.0(n1092n) 参考答案:C 参考解析:当有序线性表为顺序存储时才能用:二分法查找。可以证明的是对于长度为n的有序线性表,在最坏情况下,二分法查找只需要比较l092n次,而顺序查找需要比较n次。 27在软件开发中,需求分析阶段可以使用的工具是( )。 A.N—s图B.DFD图C.PAD图D.程序流程图 参考答案:B 参考解析:在需求分析阶段可以使用的工具有数据流图DFD图,数据字典DD,判定树与判定表,所以选择B。 28有如下类声明: class Base{ protected: int amount; public: Base(int n=0):amount(n){} int getAmount()const{retum amount;} }; class Derived:public Base{ protected: int value; public: Derived(int m,int n):value(m),Base(n){} int getData()const{return value+amount;} }: 已知x是一个Derived对象,则下列表达式中正确的是( )。 A.x.value+X.getAmount()B.x.getData()一x.getAmount()C.x.getData()一x.amountD.x.value+X.amount 参考答案:B 参考解析:本题考查公有继承中派生类对象对基类的访问属性。在公有继承中,派生类对象只能访问基类的公有成员,而不能}方问基类的保护成员和私有成员。题中x是派生类的对象,只能访问基类中公有的Base()和getAmount()成员,而不能访问保护类型的amount成员,故选项C、D错误。而类对象对类成员的访问也存在类似的情况,即类对象只能访问类的公有成员,而value是Derived的保护成员,所以A选项也错误。故答案为B。 29有三个关系R、S和T如下: 则由关系R和s得到关系T的操作是( )。 A.自然连接B.交C.除D.并 参考答案:C 参考解析:如果S=T/R,则S称为T除以R的商在除运算中s的域由T中那些不出现在R中的域所组成,对于s中的任一序组,由它与关系R中每个有序组所构成的有序组均出现在关系T中。所以本题选择C。 30下面描述中,不属于软件危机表现的是( )。 A.软件过程不规范B.软件开发生产率低C.软件质量难以控制D.软件成本不断提高 参考答案:A 参考解析:软件危机主要表现在:软件需求的增长得不到满足;软件开发成本和进度无法控制;软件质撼难以保证;软件不可维护或维护程度非常低;软件的成本不断提高;软件开发生产率的提高赶不上硬件的发展和应用需求的增长。所以选择A。 31有如下程序: #inClude using namespaCe std: Class CD{ publiC: ~CD(){Cout<<’C’:} private: Char name[80]; }; int main(){ CD a,*b,d[2]; return 0; 执行这个程序的输出结果是( )。 A.CCCCB.CCCC.CCD.C 参考答案:B 参考解析:本题考查类的析构函数.题目中定义了类的一个对象a,对象指针*b,对象数组d[2],当程序执行完后,析构函数执行了3次,输出“CCC”,对象指针不会执行析构函数。所以本题答案为8。 32类的析构函数是在( )调用的。 A.类创建时B.创建对象时C.删除对象时D.不自动调用 参考答案:C 参考解析:析构函数可以被函数调用,也可以被系统调用:函数体内的对象在函数结束时调用析构函数和使用delete释放对象所占用的资源。 33下列关于多态性的描述,错误的是( )。 A.c++语言中的多态性分为编译时的多态性和运行时的多态性 B.编译时的多态性可通过函数重载实现 C.运行时的多态性可通过模板和虚函数实现 D.实现运行时多态性的机制称为动态绑定 参考答案:C 参考解析:编译时的多态性是通过函数重载和模板体实现的,运行时的多态性是通过虚函数体实现的。 34下列有关类成员的叙述中,正确的是( )。 A.友元函数是类的成员函数 B.类成员的默认访问权限是私有的 C.类成员函数必须声明为公有的 D.类的静态数据成员不能是常成员 参考答案:B 参考解析:友元函数是指某些虽然不是类成员却能访问类的所有成员的函数,故友元函数不足类的成员函数。类成员的默认访问权限是私有的,类的成员函数¨r以是3种权限中的一种,静态数据成员可以为常成员。故本题答案为8。 35有如下程序: #inClude using namespaCe std; ClaSS A{ publiC: A(int i){x=i;} void dispa( ){Cout< int x; }; Class B:publiC A{ publiC: B(int i):A(i+10){x=i;} vold dispb( ){dispa( );Cout< int x; }; int main( )} B b(2); b.dispb( ); return 0; } 执行这个程序的输出结果是( )。 A.10,2B.12,10C.12,2D.2,2 参考答案:C 参考解析:本题考查派生类的构造函数和基类的构造函数。本题中类B继承类A,定义了·个类B的对象并初始化b(2),此时会执行类B的构造函数,执行的结果是继承类A中的私有成员赋值了12,给类B自身的数据成员x赋值了2,执行b.dispb()后,输出类A的私有成员x,输出类B自身的数据成员,所以答案为C。 36执行下列语句段后,输出字符“*”的个数是( )。 for(int i=50;i>1;i一=2) tout<<’*’: A.24B.25C.26D.50 参考答案:B 参考解析:本题考查for循环语句,题目中每执行完循环体后,i都会减2,那么只有50到2之间的偶数才能输出“*”,所以总共输出25次。 37有如下类定义: Class AA{ int a: PubliC: AA(int n=O):a(n){} }; Class BB:publiC AA{ publiC: BB(int n) }; 其中横线处的缺失部分是( )。 A.:a(n){}B.:AA(n){}C.{a(n);}D.{a=n;} 参考答案:B 参考解析:本题考查公用继承对基类成员的访问属性。公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有,本题中若要给派生类继承下来基类的私有成员赋值,那么只能调用基类的成员函数来对它赋值,成员变量默认的访问权限为私有,即a为私有变量。所以本题答案为B。 38判断char型变量c是否为小写字母的正确表达式是( )。 A.’a’<=c<=’z’B.(c>=A.&&(c<=z)C.(’a’>=C.||(’z’<=C.D.(c>=’a’)&&(c<=,z,) 参考答案:D 参考解析:字符型数据在计算机内部是以ASCII码存储的,英文大写字母和小写字母在ASCII码表中都是连续的。大写字母A~z是从65~90,小写字母a~z是从97~122。所以只要变量c大于等于a并月小于等于z就能保证其为小写字母。 39决定c++语言中函数的返回值类型的是( )。 A.return语句中的表达式类型 B.调用该函数时系统随机产生的类型 C.调用该函数时的主调用函数类型 D.在定义该函数时所指定的数据类型 参考答案:D 参考解析:c++语言中,在定义该函数时所指定的数据类璎决定函数的返回值类型。 40设int a=1,b=2;,则(a++)+b和a+++b这两个表达式的值分别为( )。 A.3,3B.3,4C.4,3D.4,4 参考答案:A 参考解析:单目的++运算优先级高于双目的+运算,不过++的结合性是自右向左的,而+是自左向右的,所以上面的两个表达式都是先计算a+b的值之后,a再自加1。 相关推荐:
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |