国家二级C++机试(继承和派生)模拟试卷13
选择题
1.建立一个有成员对象的派生类对象时,各构造函数体的执行次序为( )。(C)
A. 派生类、成员对象类、基类
B. 成员对象类、基类、派生类
C. 基类、成员对象类、派生类
D. 基类、派生类、成员对象类
解析:建立派生类对象的时候,构造函数的执行顺序如下:执行基类的构造函数,调用的顺序按照基类被继承时候的顺序(自左向右)。然后是执行成员对象的构造函数,调用顺序按照各个成员对象在类中的声明顺序(自上而下),最后是执行派生类的构造函数。
2.有如下类定义和变量定义:
class Parents{
public:
int publicData;
private:
int privateData;
};
class ChildA:public Parents{/*类体略*/};
class ChildB:private Parents{/*类体略*/};
ChildA a;
ChildB b;
下列语句中正确的是( )。(A)
A. cout<<a.publicData<<endl;
B. cout<<a.privateData<<endl;
C. cout<<b.publicData<<endl;
D. cout<<b.privateData<<endl;
解析:基类Parents的私有成员privateData在派生类ChildA和ChildB中是不可以访问,所以选项B、D是错误,而派生类ChildB私有继承基类Parents,所以基类:Parents的公有成员publicData在派生类ChildB中变为私有成员,只能在派生类ChildB内部访问,因而选项c是错误的。派生类ChildA公有继承基类Parents,所以基类Parents的公有成员publicData在派生类ChildA中可以访问。
3.通过派生类的对象可直接访问其( )。(A)
A. 公有继承基类的公有成员
B. 公有继承基类的私有成员
C. 私有继承基类的公有成员
D. 私有继承基类的私有成员
解析:基类的私有成员在派生类中都是不能访问的,所以选项B、D是错误的,基类的公有成员通过私有继承后,在派生类中变为了私有成员,只能在派生类中进行访问,而通过派生类的对象不能访问,所以选项C也是错误的。基类的公有成员通过公有继承后,在派生类中是公有成员,所以可以通过派生对象来访问。
4.有如下程序:
#include<iostream>
using namespace std;
class AA{
int k;
protected:
int n;
void setK(int k){this->k=k;}
public:
void setN(int n){this->n=n;}
};
class BB:public AA{/*类体略*/};
int main() {
BB x;
x.n=1;//1
x.setN(2); //2
x.k=3; //3
x.setK(4); //4
return 0;
}
在标注号码的四条语句中正确的是( )。(B)
A. 1
B. 2
C. 3
D. 4
解析:因为类BB公有继承自类AA,所以AA中的保护成员和公有成员在类BB中仍是保护成员和公有成员。在选项B中调用了公有成员函数setN(int n){this->n=n;},对保护成员n进行赋值操作。
5.有如下程序:
#include<iostream>
using namespace std;
class Music{
public:
void setTitle(char*str){strcpy(title,str);}
protected:
char type[10];
private:
char title[20];
};
class Jazz:public Music{
public:
void set(char*str){
strcpy(type,’’Jazz’’);//①
strcpy(title,str); //②
}
};
下列叙述中正确的是( )。(C)
A. 程序编译正确
B. 程序编译时语句①出错
C. 程序编译时语句②出错
D. 程序编译时语句①和②都出错
解析:派生类Jazz不能访问基类Music中的私有成员title。
6.当派生类从一个基类保护继承时,基类中的一些成员在派生类中成为保护成员,这些成员在基类中原有的访问属性是( )。(B)
A. 任何
B. 公有或保护
C. 保护或私有
D. 私有
解析:基类的公有成员和保护成员只有在以保护继承方式继承时,其在继承类中是保护成员。
7.下列关于派生类和基类的描述中,正确的是( )。(B)
A. 派生类成员函数只能访问基类的公有成员
B. 派生类成员函数只能访问基类的公有和保护成员
C. 派生类成员函数可以访问基类的所有成员
D. 派生类对基类的默认继承方式是公有继承
解析:派生类不论是采用那种继承方式继承基类,它的成员函数只能访问基类的公有成员和保护成员。
8.有如下类定义:
class B{
public:void fun1(){}
private:void fun2(){}
protected:void fun3(){}
};
class D:public B{
protected:void fun4(){}
};
若obj是类D的对象,则下列语句中不违反访问控制权限的是( )。(A)
A. pbj.fun1();
B. obj.fun2();
C. obj.fun3();
D. obj.fun4();
解析:派生类D公有继承父类B,所以obj可以访问基类B的公有,不能访问其它成员。
9.有如下程序:
#include<iostream>
using namespace std;
class xx{
int x;
public:
XX(int xx=0):x(xx){}
本文档预览:3600字符,共12911字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载