面向对象技术C++(二)
一、新单选题(每题2分,共50分。)
1. 重载函数在调用时选择的依据中,( D )是错误的。
A、参数个数 B、参数类型 C、函数名字 D、函数的类型
2. 下面选项中不属于面向对象程序设计特征的是(C )。
A、继承性 B、多态性 C、类比性 D、封装性
3. 以下一种类中,( A)不能建立对象。
A、抽象类 B、派生类 C、虚基类 D、基类
4. 若一个类的成员函数前用static关键字修饰,则该成员函数(B )。
A、可以被声明为const B、没有this指针
C、可以访问该类的所有成员 D、只能用对象名来调用
5. 用来说明类中保护成员的关键字是( C)。
A、public B、private
C、protected D、friend
6. 下列关于构造函数的描述中,错误的是 ( B)。
A、构造函数可以设置默认参数;
B、构造函数在声明对象时自动执行;
C、构造函数可以对静态数据成员进行初始化;
D、构造函数可以重载;
7. (B )不是属于面向对象程序设计的特性。
A、抽象性 B、数据相关性 C、多态性 D、继承性
8. 下列对派生类的描述中,(C ) 是错误的。
A、一个派生类可以作为另一个派生类的基类
B、派生类至少应有一个基类
C、基类中成员的访问权限被派生类继承后都不改变
D、派生类的成员除了自己定义的成员外,还包含了它的基类成员
9. main()函数可以访问派生类的对象中它的哪一类基类成员?(A )
A、公有继承的基类的公有成员 B、公有继承的基类的保护成员
C、公有继承的基类的私有成员 D、保护继承的基类的公有成员
10. 若要将类AClass定义为BClass的友元类,则应该在( B)类中定义。
A、Aclass B、BClass
C、二个类中都应定义 D、在两个类之外定义
11. 类的析构函数是在 (C ) 调用的。
A、类创建时 B、创建对象时 C、删除对象时 D、不自动调用
12. 假定一个类的构造函数为 F(int aa,int bb) {a=aa++; b=a*bb++;} ,则执行
FX(5,5);语句后,X.a和X.b的值分别为(C )。
A、4 和 20 B、5 和 30 C、5 和 25 D、5 和 16
13. 已知枚举类型声明语句为:
enum COLOR{WHITE,YELLOW,GREEN=5,RED,BLACK=9};
则下列说法中错误的是(D )。
A、枚举常量YELLOW的值为1 B、枚举常量RED的值为6
C、枚举常量BLACK的值为9 D、枚举常量WHITE的值为1
14. 以下定义数组中错误的是(C )。
A、int a[10];
B、int a[2][20];
C、int a[20][];
D、int a[20];
15. 友元在访问类的对象的成员时(D )。
A、直接使用类的成员名 B、使用this指针指向成员名
C、使用“类名::成员名”的形式 D、使用“对象名.成员名”的形式
16. 在一个类,可以对一个操作符进行(D )种重载。
A、1 B、2种以下 C、3种以下 D、多种
17. 下面的函数声明中, (B )是” void DE(int a, int b);”的重载函数。
A、int DE(int a, int b)
B、void DE(int a, char b)
C、float DE(int a, int b, int c = 0)
D、void DE(int a, int b=0)
18. 若有说明int a[3][4];,则a数组元素的非法引用是(D )。
A、a[0][1*2] B、a[1][3]
C、a[4-2][0] D、a[0][4]
19. 派生类中对基类的虚函数进行替换时,派生类中说明的虚函数与基类中的被替换的虚函数之间不要求满足的是( A)。
A、与基类的虚函数具有不相同的参数个数
B、其参数的类型与基类的虚函数的对应参数类型相同
C、派生类虚函数所返回的指针或引用的基类型是基类中被替换的虚函数所返回的指针或引用的基类的子类型
D、其返回值或者与基类的虚函数相同,或者都返回指针或引用
20. 关于类定义格式的描述中,(B )是错误的。
A、一般类的定义格式分为说明部分和实现部分
B、成员函数都应是公有的,数据成员都应是私有的
C、构造函数可以重载
D、一般类中包含有数据成员和成员函数
21. 下列语句中错误的是(A ):
A、const int a;
B、const int a=1;
C、const int*point=0;
D、const int*point=new int(5);
22. 设置虚基类的目的是(A )。
A、消除两义性 B、简化程序 C、提高运行效率 D、减少目标代码
23. 下面的语句中能将类B定义为类A的友元类的是(A )。
A、class A { friend class B}
B、friend class B
C、class A {class B}
D、class B { friend class A}
24. 动态内存分配的主要目的是(B )。
A、使程序按动态方式运行 B、正确合理的使用内存
C、提高程序的运行速度 D、提高程序的可读性
25. 关于多继承二义性的描述,( D)是错误的。
A、派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性
B、如果一个派生类是从具有两个同名间接基类的两个直接基类派生来的,则派生类对该公共基类的访问可能出现二义性
C、解决二义性最常用的方法是使用作用域运算符对成员进行限定
D、派生类和它的基类中出现同名函数时,将出现二义性
二、是非题(正确的填写“T”,错误的填写“F”。每题1分,共20分。)
1. 对象数组的元素可以是不同类的对象。F
2. 一个类中只能定义一个析构函数。T
3. 带有纯虚函数的类是抽象类。T
4. 拷贝构造函数用它所在类的对象作为参数。F
5. delete运算符必须用于new返回的指针。F
6. 子对象是类的一种数据成员,一个类中只能含有一个子对象作其成员。F
7. 在一个类,可以对一个操作符进行多种重载。T
8. 若要实例化一个含有引用型数据成员的类,那么只能使用构造函数初始化列表来初始化该数据成员。T
9. 构造函数可以重载。T
10. 对象数组的数组名是一个常量指针。T
11. C++中的所有函数调用都是传值调用。F
12. 使用new运算符创建的对象或对象数组可以使用运算符delete删除。T
13. 成员函数都应是公有的、数据成员都应是私有的。F
14. 说明静态数据成员时前边要加修饰符static。T
15. C++中,数组下标从1开始。F
16. 虚函数是为实现某种功能而假设的函数,派生类的虚函数定义影响其基类,而基类的虚函数定义不影响其派生类。F
17. C++语言支持封装性和继承性,不支持多态性。F
18. 用于输出表达式值的标准输出流对象是cin,用于从键盘上为变量输入值的标准输入流对象是cout。F
19. int i,*p=&i;上述语句是正确的。T
20. 多继承情况下,派生类的构造函数的执行顺序取决于定义派生时所指定的各基类的顺序。T
三、问答题(每题15分,共30分。)
1. 读程序,回答问题
(1)下面循环语句运行的次数是?并解释原因。
int i=0; do i++; while(i*i<10);
答:
1)运行的次数是4次
原因分析如下:
do while循环不管怎样都会运行一次。
析构函数的定义一开始i=0,运行一次后,i=1,1*1<10,
继续运行一次,i=2,2*2<10,
再运行一次,i+1变成3,3*3<10,共运行了3次,
接着运行一次,i等于4,当i=4时,4*4不再小于10,不满足要求,跳出循环。所以一共运行了4次。
原因分析如下:
do while循环不管怎样都会运行一次。
析构函数的定义一开始i=0,运行一次后,i=1,1*1<10,
继续运行一次,i=2,2*2<10,
再运行一次,i+1变成3,3*3<10,共运行了3次,
接着运行一次,i等于4,当i=4时,4*4不再小于10,不满足要求,跳出循环。所以一共运行了4次。
(2)假定x=5,y=6,则执行表达式y*=x++计算后,x和y的值分别是多少。并解释原因。如果执行表达式y*=++x呢?
答:
x和y的值分别为6和30。
x执行x++后,加1变为6。
对于y则是先用x=5的值计算,所以y的结果为5*6=30。
如果执行表达式y*=++x,则x仍是6,y的结果为36。
对于y则是先用x=5的值计算,所以y的结果为5*6=30。
如果执行表达式y*=++x,则x仍是6,y的结果为36。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论