面向对象程序设计A
《面向对象程序设计》
一、选择题(每题2分,共20分)
1. C++源程序文件的缺省扩展名是(A )。
A. cpp
B.exe
C. obj
D. Lib
解析:
.cpp是C++源程序文件扩展名
.exe是可执行文件扩展名
.obj是编译器生成的目标扩展名
.lib是C++库文件扩展名
2.下列描述错误
..的是(C )。
A. cout输出转义字符’\endl’是使光标移到屏幕上的下一行
B. 所有变量都要先定义其数据类型后再使用
C. 在C++语言中,变量声明positIon和PoSitioN是相同的
D. 变量声明可以在C++程序的任何地方
解析:
A: endl 表示的是换行
B: C++的变量、对象必须在使用前声明其类型
C: C++中的所有名字(变量名、函数名、类名)都区分大小写。
D: C++中的变量可以在任何地方声明,这点和C语言不一样。
3. 要运行一个C语言编写的应用程序如下:
main() {
printf("hello world");
}
在VC++2008的开发环境中,应该建立(B )类型的工程?
A. Windows 窗体应用程序
B. Win32 控制台应用程序
C. CLR控制台应用程序
D. MFC应用程序
解析:
课堂上老师教的内容都是属于控制台应用程序,所以此题答案选B。
Win32指的是Windows32位子系统,现在的操作系统都是32位的操作系统。
4. 多文件结构中一个源程序可以划分为多个源文件,以下说法中正确的是( A )
A.一般把类的定义保存为.h文件
B.类的实现保存为.h文件
C.类的应用保存为.h文件
D.所有文件保存为.cpp文件
解析:
本题最佳答案A
A.类的定义一般放在.h文件,这是条准则。
B.类的实现部分(成员函数定义)一般放在.cpp文件里,这也是条准则。
C.类的应用通常指的是用类定义对象,这个在.h文件里是可以的,比如定义一个inline 对象。
D.所有文件保存为.cpp是正确的,但是格式不好!
5. 以下哪个关键字对应的属性破坏了程序的封装性( D )
A)const B)friend C)public D)protected
解析:
A. const 关键字使用来定义常量的,与封装无关;
B.friend关键字用于定义一个类的友元(类、函数等),这个友元可以直接访问类的
任何细节,所以打破了类的封装属性。
C. public关键字是访问控制修饰符,用来表明成员可以在外部访问。
D. protected: 关键字也是访问控制修饰符,用来表明成员只能被自身以及派生类的
成员函数访问。
6. 下述静态数据成员的特征中,(D )是错误
..的。
A.说明静态数据成员时前边要加修饰符static;
B.静态数据成员要在类体外进行初始化;
C.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符;
D.静态数据成员不是所有对象所共用的。
解析:
A.在类中声明静态成员时必须加关键字static,注意这里只是说声明,不是定义(基础语法)
B.静态数据成员必须类外进行定义,因为在类中只是做了声明,但没有定义。
C.引用静态数据成员的语法是:类名:数据成员名
D.静态数据成员被每个对象所共享。
7. (A )是析构函数的特征。
A. 一个类中只能定义一个析构函数;
B. 析构函数与类名不同;
C. 析构函数的定义只能在类体内;
D. 析构函数可以有各个或多个参数。
解析:
每个类只能有一个析构函数,且析构函数的名字是:~ 类名,析构函数不能有任何参数和返回值。
8.以下哪个符号(或组合)是作用域限定符( C )
A)-> B). C):: D)[]
解析:
课本P712
A.->是间接成员选择运算符
B..是成员选择运算符
C.::是作用限定符
D.[]是下标运算符
9. 假定AB为一个类,则( B )为该类的拷贝构造函数的声明。
A) AB(AB x) B) AB(AB&) C) AB(AB *) D) AB&(AB &x)
解析:
拷贝构造函数的声明格式:
AB(AB &); // 这种格式很少见
AB(const Ab &);// 一般使用这种格式
A.这种构造函数定义不合法
B.正确答案
C.这个是普通构造函数,接受一个指针参数
D.不合法函数定义:函数名只能是以字母和下划线开头,且后面可以跟字母数字下划
线
10.关于对象概念的描述中,( A )是错误的。
A. 对象就是C语言中的结构变量;
B.对象代表着正在创建的系统中的一个实体;
C. 对象是一个状态和操作(或方法)的封装体;
D. 对象之间的信息传递是通过消息进行的;
解析:
A. C++中的对象拥有属性(数据成员)、行为(成员函数)、封装性,而C语言的结构体变量只是一个数据集合.
B.一般对象都代表着应用领域中的一个实体。比如你定义了一个汽车对象,那么这个对象就代表一辆汽车。
C.对象的定义
D.所谓消息传递就是指调用成员函数,所以对象之间要传递消息就是通过调用调用成员函数进行的。
二、填空题(每空2分,共20分)
1.在类中必须声明成员函数的原型,成员函数的定义部分可以写在类外。
2.函数的递归调用是指函数直接或间接地调用自身。
3.进行函数重载时,被重载的同名函数如果都没有用const修饰,则它们的形
参类型或个数必须不同。
4.拷贝构造函数的形参必须是类对象的引用。
5.C++的五种作用域分别是程序作用域、文件作用域、_____函数作用域_______、和_ 类作用域。
6.类的访问权限有public、private 和______protected_________ 。
三、写出程序运行结果(每题 4分,共 24 分)
1、写出下列程序的运行结果。
#include
using namespace std;
void main()
{
int x=10; // 定义一个变量x ,并用10对其进行初始化
int &p=x; // 定义一个x的引用(别名),现在x和p是同一个变量
p=x+10;// 首先计算x + 10(10 + 10),然后把结果保存在p(20)
// 打印x=10,p=p\n
cout<<"x="< } 运行结果: X=20,p=20\n 2、写出下列程序的运行结果。 #include using namespace std; void myFunction(); int x = 5, y = 7; int main() { int x=0; // 局部作用中的同名变量会覆盖外围作用域中的变量 cout << "x from main: " << x << "\n"; cout << "y from main: " << y << "\n\n"; myFunction(); cout << "Back from myFunction!\n\n" cout << "x from main: " << x << "\n"; cout << "y from main: " << y << "\n"; return 0; } void myFunction() { int y = 10;// 局部作用中的同名变量会覆盖外围作用域中的变量 cout << "x from myFunction: " << x << "\n"; cout << "y from myFunction: " << y << "\n\n"; } 运行结果: x from main:0 y from main:7 x from myFunction:5 y from myFunction:10 Back from myFunction! x from main:0 y from main:7 3、写出下列程序的运行结果。 #include using namespace std; class MyClass { public: MyClass(int a){X=a;} void Print() const{cout<<"Const:X="< void print(){cout<<"X="< private: int X; }; void main() { MyClass my_const(10); MyClass my(20); my_const.Print(); my.print(); } 运行结果: Const:X=10 X=20 4、当用户分别输入4和5以后,写出下列程序的运行结果。 #include using namespace std; class Rectangle { public: Rectangle(float len, float width) { Length = len; Width = width; } ~Rectangle(){}; float GetArea() { return Length * Width; } float GetLength() { return Length; } float GetWidth() { return Width; } private: float Length; float Width; }; void main() { float length, width; cout << "Please enter the length of the rectangle:"; cin >> length; cout << "Please enter the width of the rectangle:"; cin >> width; Rectangle r(length, width); cout << "length:" << length << "width" << width << "Rectangular area:" << r.GetArea () << endl; } 运行结果: Please enter the length of the rectangle:20 Please enter the width of the rectangle:20 Length:20width:20Rectangular area:400 5.写出下列程序的运行结果。 #include using namespace std; class Sample { int a,b; static int c; //静态变量声明 public: Sample() { a=b=0; // 相当于 a = 0; b = 0; c=c+1; // 变量c自增 } void show() {