最新c++题库及答案 下载本文

答案:(P117)void (A::*pf)(void)=&A::f;

[解析]void(A::*pf)(void)=&A::f;指向成员函数的指针,它相当于两条语句 :void(A::*pf)(void);和pf=&A::f;。 4. 执行下列程序

double a=3.1415926,b=3.14;

cout<

[解析]题目设置精度即有效数字都是5,a四舍五入是3.1416,b是3.14。 5. vector类中用于删除向量中的所有对象的方法是___。 答案:clear()

[解析]向量的使用。返回向量中对象的方法有:front()back()operator[],在向量中删 除对象的方法pop_back erase clear。

6. 重载的运算符保持其原有的___、优先级和结合性不变。 答案:操作数

[解析]运算符重载时要遵循以下规则: (1)除了类属关系运算符“.”、成员指针运算符“.*”、作用域运算符“::”、sizeof运算符 和三目运算符“?:”以外,C++中的所有运算符都可以重载。

(2)重载运算符限制在C++语言中已有的运算符范围内的允许重载的运算符之中,不能创建新的 运算符。

(3)重载之后的运算符不能改变运算符的优先级和结合性,也不能改变运算符操作数的个数及

语法结构。

7. 编译时的多态性通过___函数实现。 答案:重载

[解析]编译多态性,实现的方法主要通过函数的重载或运算符的重载。 8. 基类的公有成员在派生类中的访问权限由___决定。 答案:访问控制方式或继承方式

9. 假设类X的对象x是类Y的成员对象,则“Y Obj”语句执行时,先调用类___的构造函数。 答案:X

[解析]派生类中的构造函数的执行顺序,先基类后派生类。 10. 下列程序段的输出结果是___。 cout.setf(ios::showpos); cout<<509.3<

答案:(P193)+509.3

[解析]输入、输出格式ios::showpos用于输出数据的符号位。 11. 下列程序段的输出结果是___。

for(i=0,j=10,k=0;i<=j;i++,j-=3,k=i+j);cout<

[解析]for循环结构,三个表达式的作用,初始化、循环判断条件和循环变量变化。循环执行了

三次,k的作用是计算i、j的和。 12. C++中ostream的直接基类___。

答案:ios

[解析]istream和ostream的直接基类是ios。 13. int n=0;

while(n=1)n++;

while循环执行次数是___。 答案:无限次

[解析]=是赋值运算符,不是关系运算符,且不等0,所以死循环。 14. C++中有两种继承:单继承和___。 答案:多继承

[解析]单继承和多继承,多继承即有多个基类。

15. 在C++中,利用向量类模板定义一个具有10个int的向量A,其元素均被置为1,实现此操作

的语句是___。

答案:vectorA(10,1)

[解析]定义向量列表vectorA(10,1),使用两个参数,10表示长度,1表示数值。 16. vector类中向向量尾部插入一个对象的方法是___。 答案:push_back

17. C++语言中如果调用函数时,需要改变实参或者返回多个值,应该采取___方式。 答案:传地址或引用

[解析]传地址即指针,在函数中通过指针修改它指向的变量的值时,实参也就变化了。使用引

用,直接修改变量的别名即引用的值,该变量也就随着变化。

18. 若函数的定义处于调用它的函数之前,则在程序开始可以省去该函数的___语句。 答案:声明

[解析]函数使用有两部分:声明和定义。定义在前,可以无声明;但函数定义在后,调用在前

的话,需要先声明函数的原型。

19. 在C++中有两种参数传递方式:传值和___。 答案:传引用 [解析](1)传值调用又分为数据传值调用和地址传值调用。(2)引用调用是将实参变量值传

递给形参,而形参是实参变量的引用名。引用是给一个已有变量起的别名,对引用的操作就是对

该引用变量的操作。

20. 将指向对象的引用作为函数的形参,形参是对象的引用,实参是 ___。 答案:对象名

[解析]实参与形参类型要一致,形参是对象的引用,实参应该是对象名。 三、改错题(本大题共5小题,每小题4分,共20分) 1. class ABC {int a; public:

ABC(int aa)a(aa){} };

答案:ABC(int aa)a(aa){}初始化列表格式错误。

[修改]ABC(int aa):a(aa){} 2. #include class Aton {int X,Y; protected: int zx,zy; public:

void init(int i,int j){zx=i;zy=j;} Aton(int i,int j,int n=0,int m=0) {X=i,Y=j,zx=m,zy=n; } };

void main()

{Aton A(25,20,3,5); A.init(5,9);

cout<

答案:int X,Y;因为X,Y都是私有的,在类外无法直接访问。 [修改]public:int X,Y; 3. #include class Bas {public:

~Bas(){cout<<\virtual void f()=0; };

class Dev:public Bas {public:

~Dev(){cout<<\virtual void f(){cout<<\};

void main()

{Bas *a=new Bas(); Dev p; a=&p; a->f(); }

答案:[修改]Bas *a; [解析]Bas *a=new Bas();抽象类不能被实例化,但可以声明指针或引用,所以不能用new,因

为new产生临时对象。

4. 以下程序实现交换a,b变量的值,请用下横线标出错误所在行并给出修改意见。 #include void swap(int &a,int &b) {a=a+b; b=a-b;

a=a-b; }

void main() {int a=19,b=15;

cout<<\swap(&a,&b);

cout<<\}

答案:swap(&a,&b);函数的形参是变量的引用,调用时的实参应该是地址。 [修改]swap(a, b); 5. #include void main() {int i(3),j(8); int * const p=&i; cout<<*p<

cout<<*p<

答案:int * const p=&i;在指针变量前加const表示一个常指针即地址不能变化,它指向的变 量不能改变且定义时必须设置指向变量或对象的地址。 [修改]int *p=&i;

四、完成程序题(本大题共5小题,每小题4分,共20分)

1. 在下面程序横线处填上适当内容,使程序执行结果为:\。 #include #include using namespace std; class mystring {public:

char * pdata; mystring(int len)

{pdata=new char[len+1]; }

~mystring() {delete pdata;}

void show(){cout<

void fun(mystring** array,int len) {mystring*old=*array; _______;

memcpy(*array, old, len); }

void main()

{mystring str(20); mystring*pstr=&str;