《面向对象程序设计》期末复习题及答案4 下载本文

面向对象程序设计期末复习指导

一、单项选题

1.字符串”a+b=12\\n”的长度为( )。

A. 6 B. 7 C. 8 D. 9 2. x>0 || y==5的相反表达式为( )。

A. x<=0 || y!=5 B. x<=0 && y!=5

C. x>0 || y!=5 D. x>0 && y==5 3. 循环体有可能一次都不执行的语句为( )。

A. for循环 B. switch循环 C. do循环 D. 任一种循环

4. 函数调用func((exp1,exp2,exp3),exp4,exp5))中所含实参的个数为( )个。

A. 1 B. 2 C. 3 D. 5

5. 假定p是具有int**类型的指针变量,则给p赋值的正确语句为( )。

A. p=new int; B. p=new int[10];

C. p=new int**; D. p=new int*;

6.假定一个二维数组的定义语句为“int a[3][4]={{3,4},{2,8,6}};”,则元素a[2][1]的值为( )。

A. 2 B. 4 C. 6 D. 0

7. 假定一个类的构造函数为“A(int aa=1, int bb=0) {a=aa; b=bb;}”,则执行“A x(0);”语句后,x.a和x.b的值分别为( )。

A. 0和0 B. 0和1 C. 1和0 D. 1和1

8. 假定AA为一个类,int a()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为( )。

A.int AA::a() B.int AA:a() C.AA::a() D.AA::int a()

9.关于插入运算符<<的重载,下列说法不正确的是( )。 A. 运算符函数的返回值类型是ostream & 。 B. 重载的运算符必须定义为类的成员函数。

C. 运算符函数的第一个参数的类型是ostream & 。 D. 运算符函数有两个参数。

10. 假定AB为一个类,px为指向该类的一个含有n个对象的动态数组的指针,

则执行“delete []px;”语句时共调用该类析构函数的次数为( )。

A. 0 B. 1 C. n D. n+1

二、填空题

1. 当使用_______保留字作为函数类型时,该函数不返回任何值。

2. 执行char *p=new char(’x’)操作后,p所指向的数据对象的值为________。 3. 当在程序中执行到________语句时,将结束本次循环,执行下一次循环语句。 4. 一个指针类型的对象占用内存的________个字节的存储空间。

5. 假定用户为类AB定义了一个构造函数“AB(int aa) {a=aa;}”,则系统(会/不会)_________为该类自动定义一个无参构造函数\。

6.已知语句“cout<

7. 如果一个派生类的基类不止一个,则这种继承称为____________。 8. 重载一个函数的条件是:该函数必须在参数的个数或参数对应的__________上与其它同名函数不相同。

9. 假定用户为类AB定义了一个构造函数“AB(int aa) {a=aa;}”,则系统(会/不会)_________为该类自动定义一个无参构造函数\。

10.假定用户为类AB定义了一个构造函数“AB(int aa=0):a(aa){}”,则定义该类的对象时,可以有________种不同的定义格式。

三、程序填充题,根据题意在横线上填写合适的内容。 1. 已知一个类的定义如下: #include class AA { int a[10]; int n; public:

void SetA(int aa[], int nn); //初始化函数

int MaxA(); //从数组a中前n个元素中查找最大值

void SortA(); //采用选择排序的方法对数组a中前n个元素 进行从小到大排序 };

该类中MaxA()函数的实现如下,请在标号位置补充适当的内容。 int ____(1)_____ {

int x=a[0];

for(int i=1; ix) ___(2)___; ___(3)___; }

(1) (2) (3)

2. 类A的定义 class A {

int *a; int n; int MaxLen; public:

A(): a(0), n(0), MaxLen(0) {} //无参构造函数 A(int *aa, int nn, int MM) { //带参构造函数 n=nn;

MaxLen=MM;

if(n>MaxLen) exit(1); a=new int[MaxLen];

for(int i=0; i

~A(){_____(2)_________;}

};

(1) (2)

3.在下面一段类定义中, Derived类公有继承了基类Base。需要填充的函数由注释内容给出了功能。 class Base{ private:

int mem1,mem2; //基类的数据成员 public:

Base(int m1,int m2) { mem1=m1; mem2=m2; }

void output(){cout<

class Derived: public Base{ private:

int mem3; //派生类本身的数据成员 public:

//构造函数,由m1和m2分别初始化mem1和mem2,由m3初始化mem3 Derived(int m1,int m2, int m3); //输出mem1,mem2和mem3数据成员的值 void output(){ ___(1)___;

cout<

} };

Derived::Derived(int m1,int m2, int m3): ___(2)___ {

___(3)___; }

(1) (2) (3)

四、理解问答题,写出程序运行结果或程序(或函数)所能实现的功能。

1.#include double f1(int n) { double sign=1,s=1;

for(int i=2;i<=n; i++) { s+=sign/(i*i); sign*=-1; }

return s; }

void main(){ int a; cin>>a;

cout<

函数功能:

2.char* f8(char* str1, const char* str2){

int i=0,j=0;

while(str1[i]) i++;

while(str2[j]) str1[i++]=str2[j++] ; str1[i]='\\0'; return str1; }

函数功能:

3.#include void f2(int& x, int& y){ int z=x; x=y; y=z; }

void f3(int* x, int* y){ int z=*x; *x=*y; *y=z; }

void main(){

int x=10,y=26;

cout<<\ f2(x,y);

cout<<\ f3(&x,&y);

cout<<\ x++; y--; f2(y,x);

cout<<\ }

运行结果:

五、程序改错,请根据程序段或函数模块的功能改写个别地方的错误。

下面是分数类fract的定义及测试主程序,在类定义及其友元函数定义中有两处错误,更正错误后程序应显示41/28,请指出错误所在行的行号并给出改正意见。 class fract{

int den; //分子 int num; //分母