全国2018年1月高等教育自学考试
面向对象程序设计试题
课程代码:02328
一、单项选择题(本大题共10小题,每小题2分,共20分)
在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。
1.编写C++程序一般需经过的几个步骤依次是( ) A. 编译、编辑、连接、调试 C. 编译、调试、编辑、连接
B. 编辑、编译、连接、调试 D. 编辑、调试、编译、连接
2.函数调用func((exp1,exp2),(exp3,exp4,exp5))中所含实参的个数为( ) A.1 C.4
B.2 D.5
3.假定AB为一个类,则执行 “AB a(2), b[3], *p[4];”语句时共调用该类构造函数的次数为( ) A. 3 C. 5
B. 4 D. 9
4.假定AB为一个类,px为指向该类的一个含有n个对象的动态数组的指针,则执行“delete []px;”语句时共调用该类析构函数的次数为( ) A. 0 C. n
B. 1 D. n+1
5.如果表达式++a中的“++”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为( ) A. a.operator++(1) C. operator++(a,1) 6. 继承机制的作用是( ) A. 信息隐藏 C. 定义新类
B. 数据封装 D. 数据抽象 B. operator++(a) D. a.operator++()
7.以下哪个基类中的成员函数表示纯虚函数? ( ) A. virtual void vf(int) C. virtual void vf()=0
B. void vf(int) = 0 D. virtual void yf(int){}
1
…………………………………………………………精品自学考试资料推荐………………………………………………
8.假定一个类的构造函数为 “A(int aa, int bb) {a=aa; b=aa*bb;}”,则执行 “Ax(4,5);”语句后,x.a和x.b的值分别为( ) A. 4和5 C. 4和20
9.一个类的静态数据成员所表示属性( ) A. 是类或对象的属性 C. 只是类的属性
10.一个C++源程序文件的扩展名为( ) A. .h C. .cpp
B. .c D. .cp
B. 只是对象的属性 D. 是类和友元的属性 B. 5和4 D. 20和5
二、填空题(本大题共10小题,每小题2分,共20分)
请在每小题的空格中填上正确答案。错填、不填均无分。
11.重载“<<”操作符时,应声明为 ____________ 函数。 12.在C++中,编译指令都是以____________(符号)开始。
13.假定要把aa定义为AB类中的一个引用整数型数据成员,则定义语句为____________。 14.C++支持两种多态性,编译时的多态性和____________时的多态性。
15.假定用户为类AB定义了一个构造函数“AB(int aa=0):a(aa){}”,则定义该类的对象时,可以有____________种不同的定义格式。
16.若p指向x,则____________与x的表示是等价的。
17.C++的流库预定义了4个流,它们是cin、cout、cerr和____________。 18.当函数参数表用____________保留字表示时,则表示该参数表为空。 19.每个对象都是所属类的一个____________。
20.作为类的成员函数重载一个运算符时,参数表中只有一个参数,说明该运算符有____________个操作数。
三、改错题(本大题共2小题,每小题6分,共12分)
21.假定要求下面程序输出结果为“d=800,f=60”,在第5-20行中存在着三条语句错误,请指出错误语句的行号并改正。 #include 2 //1行 //2行 int a[10]; int n; …………………………………………………………精品自学考试资料推荐……………………………………………… public: //3行 //4行 //5行 //6行 //7行 //8行 //9行 //10行 //11行 //12行 //13行 //14行 //15行 //16行 //17行 //18行 //19行 //20行 //21行 //22行 //23行 A(int aa[], int nn): n(nn) { for(int i=0; i int A::SumA(int n) { int s=0; for(int j=0; j int a[]={2,5,8,10,15,20}; A x(a,6); int d=1; for(int i=0; i<4; i++) d*=x.a[i]; int f=SumA(6); cout<<\"d=\"< 22.下面程序段第4到7行中存在着三条语句的语法错误,请指出错误语句的行号并改正。 class A { int a,b; //1行 //2行 //3行 //4行 //5行 //6行 const int c; public A():c(0);a(0);b(0) {} A(int aa, int bb) c(aa+bb); {a=aa; b=bb;} 3 …………………………………………………………精品自学考试资料推荐……………………………………………… }; //7行 //8行 //9行 //10行 A a,b(1,2); A *x=&a, &y=b; A *z=new A, w[10]; 错误行的行号为____________、____________和____________。 分别改正为____________、____________和____________。 四、程序填空题(本大题共3小题,每小题6分,共18分) 请按提示要求完成以下程序段的填空。 23.在下面一段类定义中, Derived类公有继承了基类Base。需要填充的函数由注释内容 给出了功能。 class Base { private: int mem1,mem2; //基类的数据成员 public: Base(int m1,int m2) { mem1=m1; mem2=m2; } void output(){cout< private: int mem3; public: //构造函数,由m1和m2分别初始化mem1和mem2,由m3初始化mem3 Derived(int m1,int m2, int m3); //输出mem1,mem2和mem3数据成员的值 4 //派生类本身的数据成员 …………………………………………………………精品自学考试资料推荐……………………………………………… void output(){ (1) ; cout< (1) (2) (3) 24.class A { int a,b; public: (4) //定义构造函数,使参数aa和bb的默认值为0, {a=aa;b=bb;}//在函数体中用aa初始化a,用bb初始化b }; main() { A *p1, *p2; (5) ;//调用无参构造函数生成由p1指向的动态对象 (6) ;//调用带参构造函数生成由p2指向的动态对象, //使a和b成员分别被初始化为4和5 } (4) (5) (6) 25.已知一个类的定义如下:(假设类的成员函数已实现) #include int a[10]; int n; public: void SetA(int aa[], int nn); //用数组aa初始化数据成员a, //用nn初始化数据成员n int MaxA();//从数组a中前n个元素中查找最大值 5 …………………………………………………………精品自学考试资料推荐……………………………………………… void SortA(); //采用选择排序的方法对数组a中前n个元素 //进行从小到大排序 void InsertA(); //采用插入排序的方法对数组a中前n个元素进行从小到大排序 void PrintA(); //依次输出数组a中的前n个元素 //最后输出一个换行 }; 使用该类的主函数如下: void main() { int a[10]={23,78,46,55,62,76,90,25,38,42}; AA x; (7) ; int m= (8) ; (9) ; cout< (7) (8) (9) 五、程序分析题(本大题共6小题,每小题5分,共30分) 阅读以下程序,写出其运行结果。 26.当从键盘上输入9.98时,写出下面程序的执行结果。