国家二级C++机试(继承和派生)模拟试卷19
选择题
1.建立一个有成员对象的派生类对象时,各构造函数体的执行次序为( )。(C)
A. 派生类、成员对象类、基类
B. 成员对象类、基类、派生类
C. 基类、成员对象类、派生类
D. 基类、派生类、成员对象类
解析:建立派生类对象的时候,构造函数的执行顺序如下:执行基类的构造函数,调用的顺序按照基类被继承时候的顺序(自左向右)。然后是执行成员对象的构造函数,调用顺序按照各个成员对象在类中的声明顺序(自上而下),最后是执行派生类的构造函数。
2.通过派生类的对象可直接访问其( )。(A)
A. 公有继承基类的公有成员
B. 公有继承基类的私有成员
C. 私有继承基类的公有成员
D. 私有继承基类的私有成员
解析:基类的私有成员在派生类中都是不能访问的,所以选项B、D是错误的,基类的公有成员通过私有继承后,在派生类中变为了私有成员,只能在派生类中进行访问,而通过派生类的对象不能访问,所以选项C也是错误的。基类的公有成员通过公有继承后,在派生类中是公有成员,所以可以通过派生对象来访问。
3.有如下程序:
#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进行赋值操作。
4.有如下两个类定义
class xx{
private:
double x1;
protected:
double:x2;
public:
double x3;
};
class YY:protected XX{
private:
double y1;
potected:
double y2;
public:
double y3;
};
在类YY中保护成员变量的个数是( )。(C)
A. 1
B. 2
C. 3
D. 4
解析:在C++中派生类从基类保护继承时,基类的公有成员在派生类中改变为保护成员,基类的保护成员在派生类中仍为保护成员。所以对于本题来说,YY类保护继承自类XX,那么类XX中的公有成员x3和保护成员x2在派生类中都成为保护成员,再加上类YY中的保护成员y2,因此在派生类YY中保护成员的个数为3。
5.当派生类从一个基类保护继承时,基类中的一些成员在派生类中成为保护成员,这些成员在基类中原有的访问属性是( )。(B)
A. 任何
B. 公有或保护
C. 保护或私有
D. 私有
解析:基类的公有成员和保护成员只有在以保护继承方式继承时,其在继承类中是保护成员。
6.下列关于派生类和基类的描述中,正确的是( )。(B)
A. 派生类成员函数只能访问基类的公有成员
B. 派生类成员函数只能访问基类的公有和保护成员
C. 派生类成员函数可以访问基类的所有成员
D. 派生类对基类的默认继承方式是公有继承
解析:派生类不论是采用那种继承方式继承基类,它的成员函数只能访问基类的公有成员和保护成员。
7.有如下类定义:
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的公有,不能访问其它成员。
8.有如下程序:
class Base{
public:
int data;
};
class Derivedl:public Base f};
};
class Derived2:protected Base{};
int main(){
Derivedl d1;
Derived2 d2;
d1.data=0; //①
d2.data=0; //②
return 0;
}
下列关于程序编译结果的描述中,正确的是( )。(C)
A. ①②皆无编译错误
B. ①有编泽错误,②无编译错误
C. ①无编译错误,②有编译错误
D. ①②皆有编译错误
解析:保护继承的类Dervied2不能访问基类Base中的公共数据成员data。
9.有如下程序:
#include<iostream>
using namespace std;
class xx{
int x;
public:
XX(int xx=0):x(xx){}
int getX(){return x;}
};
class YY:public xx{
int y;
public:
YY(int xx,int yy):XX(xx),y(yy){}
int getV(){return getX()+y;}
};
本文档预览:3600字符,共8599字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载