二级C++试题还有什么是你不知道的?

发布于 2018-09-19 11:51  编辑:大黎
0
计算机等级考试题库 扫码微信刷题

我从不怀疑自己的能力,只怀疑自己有没有努力。小编整理了计算机等级考试里 二级C++试题,含答案哦,希望对大家有帮助!


1.可以用P.a的形式访问派生类对象P的基类成员a,其中a是(  )。

A.私有继承的公有成员

B.公有继承的私有成员

C.公有继承的保护成员

D.公有继承的公有成员

 

2.下面程序的运行结果为(  )。

#include

classA

{

intnum;

public:

A(inti){num=i;)

A(A&a){num=a.num++;}

voidprint(){cout<  };

voidmain()

{

Aa(1),b(a);

a.print();

b.print();

}

A.11B.12

C.21D.22

 

3.设有定义charstr[80];以下不能将输入数据first\nsecond\n读取到数组str中的语句是(  )。

A.cin.get(str,strlen(str));

B.cin.getline(str,strlen(str));

C.cin>>str;

D.cin.read(str,strlen(str));

 

4.下列程序的输出结果为(  )。

#include

classTestClass

{

public:

TestClass(){val++;}

static,intval;

};

intTestClass::val=0;

voidmain()

{

TestClasscsl;

cout<  TestClasscs2;

TestClasscs3,cs4;

cout<  }

A.O3

B.13

C.14

D.24

 

5.有以下类定义:

classMyClass

{

private:

intid;

chargender;

char*phone;

public:

MyClass():id(0),gender(’#’),phone(NULl){}

MyClass(intn0,charge=’#’,char*ph=NULL)

{id=no;gender=ge;phone=ph;}

};

下列类对象定义语句中错误的是(  )。

A.MyClassmyObj;

B.MyClassmyObj(11,"13301111155");

C.MyClassmyObj(12,’m’);

D.MyClassmyObj(12);

 

6.下列是关于派生类声明的开始部分,其中正确的是(  )。

A.classvirtualB:publicA

B.virtualclassB:publicA

C.classB:publicAvirtual

D.classB:virtualpublicA

 

7.如果类A被说明成类B的友元,则(  )。

A.类A的成员即类B的成员

B.类B的成员即类A的成员

C.类A的成员函数不得访问类B的成员

D.类B不一定是类A的友元

 

8.下列关于虚基类的描述,错误的是(  )。

A.设置虚基类的目的是为了消除二义性

B.虚基类的构造函数在非虚基类之后调用

C.若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用

D.若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数

 

9.下列关于多态性的描述,错误的是(  )。

A.C++语言中的多态性分为编译时的多态性和运行时的多态性

B.编译时的多态性可通过函数重载实现

C.运行时的多态性可通过模板和虚函数实现

D.实现运行时多态性的机制称为动态绑定

 

10.若有如下程序:

#include

usingnamespacestd;

classTestClassl

{

private:

inta;

public:

TestClassl(inti)

{

a=i:

}

voiddisp(  )

{

cout<  }

};

classTestClass2

{

private:

intb:

public:

TestClass2(intj)

{

b=j;

}

voiddisp()

{

cout<  }

};

classTestClass3:publicTestClass2,publicTestClassl

{

private:

intc;

public:

TestClass3(intk):TestClass1(k-2),TestClass2(k+2)

{

c=k:

}

voiddisp()

{

TestClasssl::disp();

TestClasss2::disp();

cout<  }

};

intmain()

{

TestClass30bj(10);

obj.disp();

return0;

}

程序执行后的输出结果是(  )。

A.10,10,10

B.10,12,14

C.8,10,12

D.8,12,10

 

11.在下列程序的横线处填上适当的内容,使程序执行后的输出结果为ABCD(  )。

#include

usingnamespacestd;

classA

{

public:A(){cout<<’A’;}

};

classB:

{

public:B(){cout<<’B’;}

};

classC:virtualpublicA

{

public:C(){cout<<’C’;}

};

classD:publicB,publicD

{

public:D(){cout<<’D’;}

};

voidmain(){D04;}

A.publicA

B.privateA

C.protectedA

D.virtualpublicA

 

12.有如下程序:

#include

usingnamespacestd;

classAA{

intn;

public:

AA(intk):n(k){}

intget(){returnn;}

intget()const{returnn+1;}

};

intmain()

{

AAa(5);

constAAb(6);

cout<  return0;

}

执行后的输出结果是()。

A.55

B.57

C.75

D.77

 

13.有如下程序:

#include

usingnamespacestd;

classDemo

{

public:

Demo(){cout<<"defaultconstructor\n";}

Demo(constDemo&x){cont<<"copyconstruc-

tor\n";}

};

DemouserCode(Demob){Democ(b);returnC;}

intmain()

{

Demoa;d;

cout<<"callinguserCode()\n";

d=userCode(a):

return0;

}

执行上面程序的过程中,构造函数Demo(  )和Demo(constDem0&x)被调用的次数分别是(  )。

A.1和1

B.1和2

C.2和3

D.2和4

 

14.有如下程序:

#include

usingnamespacestd;

classDA{

intk;

public:

DA(intx=1):k(x){}

~DA(){cout<  };

intmain(){

DAd[]={DA(3),DA(3),DA(3));

DA+p=newDA[2];

delete[]p;

return();

}

这个程序的输出结果是(  )。

A.111

B.333

C.11333

D.11133

 

15.有如下程序:

#include

usingnamespacestd;

classMyClass{

public:

MyClass(intx):val(x){}

voidPrint()const{cout<<"const:val="<<  voidPrint(){cout<<"val="<  private:

intval;

};

intmain(){

constMyClassobj1(10);

MyClassobj2(20);

obj1.Print();

obj2.Print();

return0;

}

程序的输出结果是(  )。

A.va1=10const:va1=20

B.const:va1=10const:va1=20

C.const:va1=10val=20

D.val=10va1=20

 

16.关于函数中的<返回类型>。下列表述中错误的是(  )。

A.<返回类型>中有可能包含关键字int

B.<返回类型>中有可能包含自定义标识符

C.<返回类型>中衣可能包含字符*

D.<返回类型>中可能包含[]

 

17.Sample是一个类,执行下面语句后,调用Sample类的构造函数的次数是(  )。

Samplea[2],*p=newSample;

A.0

B.1

C.2

D.3

 

18.有如下两个类定义:

classXX{

private:

doublex1;

protected:

doublex2;

public:

doublex3;

};

claseYY:protectedXX{

private:

doubley1;

protected;

doubley2;

public:

doubley3;

};

在类YY中保护成员变量的个数是(  )。

A.1

B.2

C.3

D.4

 

19.下列关于运算符重载的描述中,错误的是(  )。

A.可以通过运算符重载在C++中创建新的运算符

B.赋值运算符只能重载为成员函数

C.运算符函数重载为类的成员函数时,第一操作参数就是该类对象

D.重载类型转换运算符时不需要声明返回类型

 

20.下列关于类模板的描述中,错误的是(  )。

A.类模板的成员函数都是模板函数

B.可以为类模板参数设置默认值

C.类模板描述了一组类

D.类模板中只允许有一个类型参数

 

1.D。【解析】只有公有继承的公有成员才能被派生类的对象直接访问,其他的情况都会因为访问权限问题产生错误。

 

2.C。【解析】本题考查考生对拷贝构造函数的掌握。因为++运算是右结合的,所以在使用a对b赋值时,b的hum变为1,而a的num变为2(先赋值再自加)。

 

3.D。【解析】本题考查cin流对象的几种成员函数get,getline,read及流提取符>>的使用规则。

 

4.C。【解析】由主函数main入手,定义TestClass类的对象cs1,执行cs1.va1,其中va1为静态变量,根据intTestClass::val=0;初始化,TestClass中的TestClass(){val++;}构造函数执行后,val值为1。主函数中接着定义对象cs2,cs3,cs4。执行cout<

 

5.B。【解析】本题考查构造函数的应用。对象建立用初始化列表对数据成员进行时。列表中的参数类型要与构造函数中形参类型一致。B选项中第二个参数为13301111155,是字符串,而构造函数中第二个形参为char型,两者不一致造成错误。

 

6.D。【解析】声明派生类的一般形成为class派生类名:[继承方式]基类名。其中继承方式包括public、private和protected。而virtual为C++中的关键字,所以选项C错。虚函数的使用方法是在基类用virtual声明成员函数为虚函数。

 

7.D。【解析】本题考查的是友元类的定义:类A为类B的友元类,则类A的所有成员函数都是类B的友元函数,但反之则不一定成立。

 

8.B。【解析】虚基类的引入就是为了消除二义性,其构造函数的调用仍然是按照继承的顺序进行的,对于多个虚基类则按它们说明的次序调用,虚基类的构造函数先于非虚基类的构造函数执行。

 

9.C。【解析】编译时的多态性是通过函数重载和模板体现的,运行时的多态性是通过虚函数体现的。

 

10.D。【解析】首先定义TestClass3的对象obj,参数为10。其中TestClass3为TestClass1和TestClass2的派生类。然后调用disp成员函数。disp中首先执行TestClassl::disp();,然后执行TestClass2::disp();,最后执行输出语句cout<

 

11.D。【解析】由主函数main入手,定义了类D对象obi。其中D为类B和C的公有继承,A是C的虚基类。题目中要求的输出结果为ABCD,依次为类A、类B、类C、类D中构造函数的输出语句。为了保证基类通过多条路径被派生类继承,即保证A只被继承一次,输出一个A,所以不但需要声明A为C的虚基类,同样也要声明A为B的虚基类。

 

12.B。【解析】所谓函数重载,是指同一个函数名可以对应着多个函数的实现,类AA中定义了两个9et()函数,一个为普通成员函数,另一个为常成员函数。一般对象a既可以调用普通成员函数get,也可以调用常成员函数get,但是由于常成员函数不能更新对象的数据成员,所以题中通过对象a调用的函数为普通成员函数get(),返回值为5。常对象b只能调用常成员函数,所以题中通过对象b调用的函数为常成员函数get(),返回值为7。

 

13.C。【解析】函数Demo()为构造函数,而Demo(constDemo&x)为复制构造函数。C++在创建一个对象时,会自动调用类的构造函数,所以语句"Demoa,d;"将调用函数Demo()2次。当一个对象作为实参传递给函数时为初始化形参,要调用拷贝构造函数;在函数返回一个对象时调用拷贝构造函数。由此可知语句d=userCode(a);调用拷贝构造函数3次。

 

14.C。【解析】本题考查的是析构函数和对象的生存期。在主函数中,首先定义了一个DA类对象数组d,从初始化列表中可以看出,它包含三个对象;然后通过new运算符动态创建了一个DA类的对象数组,并将首地址赋给DA类指针P;接着通过delete[]运算符销毁指针P所指向的数组,故此时会输出11。最后函数结束,销毁前面定义的对象数组d,会输出333。故最后的输出结果是11333。

 

15.D。【解析】在建立类对象时,构造函数的执行顺序如下:执行基类的构造函数,调用顺序按照各个基类被继承的声明顺序;执行成员对象的构造函数,调用顺序按照各个成员在类中的声明顺序;执行自身的构造函数。根据以上总结以及题意可知答案选择D选项。

 

16.B。【解析】<返回类型>又称函数类型,表示一个

函数所计算(或运行)的结果值类型,这里的类型可以是预定义类型(如int)、复合类型(如double*)、用户定义类型(如枚举类),若返回值只做更新(或设置)等操作,则该函数返回类型为void类型,函数类型和内置数组不能作为返回类型,但类类型和容器类型可以被直接返回。

 

17.D。【解析】构造函数在对象被创建时由系统自动调用,本题共创建3个对象。

 

18.C。【解析】派生类从基类保护继承classYY:pro-tectedXX时,基类的公有成员在派生类中变为保护成员,基类的保护成员在派生类中仍然是保护成员;本题中YY本身有一个保护成员y2,再加上基类XX的x2和x3,故选C。

 

19.A。【解析】运算符的重载是针对C++中原有运算符进行的,不能通过重载创造新的运算符。

 

20.D。【解析】类模板是一系列相关类的模板,类成员组成相同,成员函数的源代码形式相同,所不同的是所针对的类型。类模板的成员函数都是模板函数,在用类模板定义对象时,由于没有像函数实参表这样的额外信息渠道,因此无法按函数模板的方式省略模板实参。但可以为类模板的参数设置默认值。由此可知应选D。

 

 

在坚持的道路上,我们为你喝彩!以下是小编为大家准备的二级C++试题,欢迎大家随时阅读。希望大家在计算机等级考试取的好成绩。

 

 

文章推荐:

全国计算机等级考试可以不考一级直接考二级吗?

2018年全国计算机等级考试题库“二级MS Office 高级应用考试大纲”

全国计算机等级考试报考成功后可以退费吗?(内附计算机等级考试题库)

 

 

温馨提示:

考试想拿高分吗?更多计算机等级考试题库二级ms office试题请点击查看>>>二级ms office

想要了解更多的计算机等级考试题库请点击下载>>>计算机等级考试题库

想知道更多关于计算机等级考试题库的最新资讯吗?点击进入>>>计算机等级考试题库资讯

 

 

 

 

 

 


本文网址:http://www.k51.com.cn/info/jsjdjks/1809/1948000.html
选择分享到: