资源描述
面向对象程序设计复习题 专科
一、 单项选择题
1. 在类定义之外定义成员函数时, 下列哪些说法是正确的( ) 。
A. 必须在函数名之前加上类名和作用域符 B. 类的成员函数不可重载
C. 类定义中能够不声明该函数 D. 函数名前作用域符课省略
2. 多重继承的构造顺序一般可分为4步, 下面给出这4个步骤:
step1: 任何非虚拟基类的构造函数按照它们被继承的顺序构造。
step2: 任何虚拟基类的构造函数按照它们被继承的顺序构造。
step3: 任何成员对象的构造函数按照它们声明的顺序构造。
step4: 类自己的构造函数。
这4个步骤的正确顺序是( ) 。
A. step4、 step3、 step1、 step2 B. step2、 step4、 step3、 step1
C. step2、 step1、 step3、 step4 D. step3、 step4、 step1、 step2
3. 假设MyClass是一个类, 则该类的拷贝构造函数的声明语句为( ) 。
A. MyClass(MyClass p); B. MyClass& (MyClass p);
C. MyClass(MyClass& p); D. MyClass(MyClass * p);
4. 重载运算符与原运算符能够不一致的是什么 ( )。
A.优先级 B.操作数个数 C.操作内容 D.结合性
5. 当用户进行鼠标操作时, 释放鼠标左键会发出( ) 消息。
A.WM_lBUTTONDOWN B.WM_lBUTTONUP
C.WM_lBUTTONBLOCK D.WM_RBUTTONUP
6. 下面描述中, 表示错误的是( ) 。
A. 公有继承时基类中的public成员在派生类中仍是public的
B. 公有继承是基类中的private成员在派生类中仍是private的
C. 公有继承时基类中的protected成员在派生类中仍是protected的
D. 私有继承时基类中的public成员在派生类中是private的
7. 能够用p.a的形式访问派生类对象p的基类成员a, 其中a是什么成员( )
A. 私有继承的公有成员 B. 公有继承的私有成员
C. 公有继承的保护成员 D. 公有继承的公有成员
8. 考虑函数原型void test(int a,int b=7,char="*"),下面的函数调用中, 属于不合法调用的是( )
A. test(5); B. test(5,8); C. test(6,"#"); D. test(0,0, "*");
9. 如果在基类中将show声明为不带返回值的纯虚函数, 正确的写法是( )
A. virtual show( )=0; B. virtual void show( );
C. virtual void show( )=0; D. void show( )=0 virtual;
10. 在 ( ) 情况下适宜采用 inline 定义内联函数。
A. 函数体含有循环语句 B. 函数体含有递归语句
C. 函数代码少、 频繁调用 D. 函数代码多、 不常调用
11. 在下列叙述中, 不是Windows程序的特点是( )
A.Windows程序经过窗口与用户进行交互。 B.Windows程序是应用事件驱动进行编程。
C.Windows程序是利用消息进行通信。 D.Windows程序是利用过程驱动的程序。
12. 设置虚基类的目的是( ) 。
A. 简化程序; B. 消除二义性; C. 提高运行效率; D. 减少目标代码;
13. 下列不是控件的是( )
A. 组合框 B. 编辑框 C. 滚动条 D.菜单
14. 如果类A被说明成类B的友元, 则( )
A. 类A的成员即类B的成员 B. 类B的成员即类A的成员
C. 类A的成员函数不得访问类B的成员 D. 类B不一定是类A的友元
15. 不是Windows应用程序的资源的是( )
A. 加速键 B. 位图 C. 菜单 D. 窗口
16. 关于delete运算符的下列描述中, ( ) 是错误的。
A. 它必须用于new返回的指针;
B. 使用它删除对象时要调用析构函数;
C. 对一个指针能够使用多次该运算符;
D. 指针名前只有一对方括号符号, 不论所删除数组的维数。
17. 在下列叙述中, 叙述错误的是( )
A.Windows应用程序与控制台(Console)程序的入口函数不同。
B.在基于MFC编写的程序中, 其类大部分都是由CObject类派生出来
C.WM_LBUTTONDOWN、 WM_RBUTTONUP、 WM_KEYDOWN都是鼠标消息
D.对话框、 图标、 菜单、 光标等在VC中都能够是作为资源来处理
18. 下列哪些是有关构造函数的错误说法 ( )
A.构造函数名与类名一样 B.构造函数在说明类对象时自动执行
C.构造函数无任何函数类型 D.构造函数有且只有一个
19. 下面有关重载函数的说法中正确的是( )
A. 重载函数必须具有不同的返回值类型; B. 重载函数形参个数必须不同;
C. 重载函数必须有不同的形参列表 D. 重载函数名能够不同;
20. 当单文档应用框架接收到框架窗口的命令时, 它将按如下次序来寻找相应的消息控制函数( )
A. 视、 文档、 SDI主框架、 应用App B. 文档、 应用App、 视、 SDI主框架
C. 视、 文档、 应用App、 SDI主框架 D. SDI主框架、 文档、 视、 应用App
21、 下列关于构造函数的描述中, 错误的是( )
A)构造函数能够设置默认参数; B)构造函数在定义类对象时自动执行
C)构造函数能够是内联函数; D)构造函数不能够重载
22、 以下关于友元函数的叙述不正确的是( )
A) 友元函数提供了类之间数据共享的一个途径
B) 一个友元函数能够访问任何类的任何成员
C) 友元函数破坏了数据的封装
D) 友元函数增加了程序设计的灵活性
23、 下面描述中, 表示错误的是( )
A) 公有继承时基类中的public成员在派生类中仍是public的
B) 公有继承时基类中的private成员在派生类中仍是private的
C) 公有继承时基类中的protected成员在派生类中仍是protected的
D) 私有继承时基类中的public成员在派生类中是private的
24、 最初的计算机编程语言是( )。
A)机器语言 B)汇编语言 C)高级语言 D)低级语言
25、 C语言中允许的基本数据类型包括( )
A) 整型、 实型、 逻辑型。 B) 整型、 实型、 字符型。
C) 整型、 字符型。 D) 整型、 实型、 逻辑型、 字符型
26、 结构化程序设计的一种基本方法是( )
A) 筛选法 B) 递归法 C) 归纳法 D) 逐步求精法
27、 C++语言的跳转语句中, 对于break和continue说法正确的是( )
A) continue语句只应用与循环体中
B) break语句只应用与循环体中
C) break是无条件跳转语句, continue不是
D) break和continue的跳转范围不够明确, 容易产生问题
28、 友元的作用是( )。
A)加强类的封装性 B)提高程序的执行效率
C)实现数据的隐藏 D)增加成员函数的种类
29、 如果在基类中将show声明为不带返回值的纯虚函数, 正确的写法是( )
A) virtual show( )=0; B) virtual void show( );
C) virtual void show( )=0; D) void show( )=0 virtual;
30、 C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比, 它在求解问题方法上进行的最大改进是( )
A) 面向过程 B) 面向对象 C) 安全性 D) 复用性
31、 以下程序的输出结果为:
#include<iostream.h>
void func(int x,int y,int z)
{z=x*x+y*y;}
void main()
{ int k=33;
func(5,2,k);
count<<k;
}
A)10 B)33 C)29 D)出错
32、 设置虚基类的目的是( ) 。
A) 简化程序; B) 消除二义性;
C) 提高运行效率; D) 减少目标代码;
33、 类的析构函数是在( )调用的。
A) 类创立时 B) 创立对象时
C) 删除对象时 D) 不自动调用
34、 假设MyClass是一个类, 则该类的拷贝构造函数的声明语句为( )
A) MyClass(MyClass p); B) MyClass& (MyClass p);
C) MyClass(MyClass& p); D) MyClass(MyClass * p);
35、 关于delete运算符的下列描述中, ( ) 是错误的。
A) 它必须用于new返回的指针;
B) 使用它删除对象时要调用析构函数;
C) 对一个指针能够使用多次该运算符;
D) 指针名前只有一对方括号符号, 不论所删除数组的维数。
36、 结构化程序设计所规定的三种基本控制结构是( )
A) 输入、 处理、 输出 B) 树形、 网形、 环形
C) 顺序、 选择、 循环 D) 主程序、 子程序、 函数
37、 在下列的各类函数中, ( ) 不是类的成员函数。
A) 构造函数; B) 析构函数;
C) 友元函数; D) 拷贝初始化构造函数
38、 下述对派生类的描述中, ( ) 是错的。
A) 一个派生类能够作为另一个派生类的基类
B) 派生类至少有一个基类
C) 派生类的成员出除了它自己的成员外, 还包含了它的基类的成员。
D) 派生类中继承的基类成员的访问权限到派生类保持不变。
39、 静态成员函数没有( ) 。
A) 返回值 B) this指针
C) 指针参数 D) 返回类型
40、 当执行完下列语句:
int hot=100; int &rad=hot; hot+=100; cout<<rad<<endl; 输出结果是( ) 。
A) 0 B) 100 C) 200 D) 300
二、 名词解释
1. 什么是继承性?
2. 简述文档/视图结构的工作机制 ?
3. 解释”引用”与”指针”的区别?
4. 构造函数和拷贝构造函数的功能分别是什么?
5. static局部变量和普通局部变量有什么区别?
6. 继承性
7.多态性
8.抽象性
9.重载
10.封装性
三、 综合题
1. 写出下列程序的输出结果( ) ( 程序阅读题)
#include <iostream.h>
class AA
{ public:
AA(int i,int j) {A=i;B=j;cout<<"Constructor\n";}
AA(AA &obj) {A=obj.A+1;B=obj.B+2;cout<<"Copy_Constructor\n";}
~AA() {cout<<"Destructor\n";}
void print() {cout<<"A="<<A<<",B="<<B<<endl; }
private:
int A,B;
};
void main()
{ AA a1(2,3);
AA a2(a1);
a2.print();
AA *pa=new AA(5,6);
pa->print();
delete pa;
}
2. 阅读下面程序, 写出运行结果( ) ( 程序阅读题)
#include <iostream.h>
class Sample
{ int n;
static int sum;
public:
Sample(int x){n=x;}
void add(){sum+=n;}
void disp(){cout<<"n="<<n<<",sum="<<sum<<endl;}
};
int Sample::sum=0;
void main()
{ Sample a(2),b(3),c(5);
a.add(); b.add(); c.add(); a.disp(); b.disp(); c.disp();
}
3. 阅读下面程序, 写出运行结果( ) ( 程序阅读题)
#include <iostream.h>
class A
{ public: virtual void fun() { cout<<"A::fun()"<<endl; } };
class B: public A
{ public: void fun(){ cout<<"B::fun()"<<endl; } };
class C: public B
{ public: void fun() { cout<<"C::fun()"<<endl; } };
void f(A *p) { p->fun(); }
void main()
{ A a, *p; B b; C c;
p=&a; f(p);
p=&b; f(p);
p=&c; f(p);
}
4. 阅读下面程序, 写出运行结果( ) ( 程序设计题)
#include <iostream.h>
class Test
{private:
int i;
static int k;
public:
Test();
void Display();
};
int Test::k=0;
Test::Test()
{ i=0;
k++;
}
void Test::Display()
{ cout<<"i="<<i<<",k="<<k<<endl; }
void main()
{ Test a,b;
a.Display();
b.Display();
}
5. 阅读下面程序, 写出运行结果( ) ( 程序设计题)
#include <iostream.h>
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, y;
x = 10; y = 26;
cout << "x,y=" << x << ", " << y << endl;
f2(x, y);
cout << "x,y=" << x << ", " << y << endl;
f3(&x, &y);
cout << "x,y=" << x << ", " << y << endl;
x++; y--;
f2(y, x);
cout << "x,y=" << x << ", " << y << endl;
}
6.下列shape类是一个表示形状的抽象类, area( )为求图形面积的函数。请从shape类派生三角形类(triangle)、 矩形类( rectangle) , 请给出两个类中必要的成员变量和成员函数的定义, 其中必须含有具体的求面积函数。( 程序设计题)
class shape
{
public:
virtual float area( )=0;
};
展开阅读全文