一、选择题1. 在C++中,类与类之间的继承关系具有(C )A)自反性B)对称性C)传递性D)反对称性2. 在公有继承的情况下,基类的成员(私有的除外)在派生类中的访问权限(BA)受限制B)保持不变C)受保护D)不受保护3. 按解释中的要求在下列程序划线处填入的正确语句是:(C )#in elude <iostream.h>class Base{ public:void fun(){cout<v"Base::fun"<<endl ;}};class Derived:public Base{public :void fun (){ _______ // 在此空格处调用基类的函数fun()cout<<"Derived::f un "<<e ndl ;}};A)fu n(); B)Base.fu n(); C)Base::fu n ();D)Base->fun();4. 在保护继承的情况下,基类的成员(私有的除外)在派生类中的访问权限(C )A)受限制B)保持不变C)受保护D)不受保护5. 在哪种派生方式中,派生类可以访问基类中的protected 成员(B )A)public 禾口private B)public 、protected 禾口privateC)protected 禾口private D)仅protected6. 当一个派生类仅有protected继承一个基类时,基类中的所有公有成员成为派生类的(C)A) public 成员B) private 成员C) protected成员D) 友元7. 不论派生类以何种方法继承基类,都不能使用基类的(B )A) public 成员B) private 成员C) protected 成员D) public 成员和protected 成员8 下面叙述错误的是( S )。
A) 基类的protected 成员在派生类中仍然是protected 的B) 基类的protected 成员在public 派生类中仍然是protected 的C) 基类的protected 成员在private 派生类中是private 的D) 基类的protected 成员不能被派生类的对象访问9. 下列说法中错误的是( S )。
A) 保护继承时基类中的public 成员在派生类中仍是public 的B) 公有继承时基类中的private 成员在派生类中仍是private 的C) 私有继承时基类中的public 成员在派生类中是private 的D) 保护继承时基类中的public 成员在派生类中是protected 的10下面叙述错误的是( C)。
A) 派生类可以使用private 派生B) 对基类成员的访问必须是无二义性的C) 基类成员的访问能力在派生类中维持不变D) 赋值兼容规则也适用于多继承的组合11派生类的构造函数的成员初始化列表中,不能包含(C )。
A) 基类的构造函数B) 派生类中子对象的初始化C) 基类中子对象的初始化D) 派生类中一般数据成员的初始化12. 下列虚基类的声明中,正确的是: ( B )A)class virtual B: public A B)class B: virtualpublic AC)class B: public A virtual D)virtual class B:public A13..实现运行时的多态性采用(D )A)重载函数B)构造函数C)析构函数D)虚函数14. 若一个类中含有纯虚函数,则该类称为(D )A)基类B)纯基类C)派生类D)抽象类15. 假设A为抽象类,下列声明(B )是正确的A) A fun(in t); B) A *p; C) int fun (A); D) A Obj;16. 在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值(B)A)不同B)相同C)相容D)部分相同17. 下面函数原型声明中,(C)声明了fun为普通虚函数A) void fun()=0; B) virtual void fun()=0;C) virtual void fun(); D) virtual void fun(){};18. 在下面四个选项中,(A)是用来声明虚函数的。
A)virtual B)public C)usi ng D)false19. 实现运行时的多态性要使用(D)。
A)重载函数B)构造函数C)析构函数D)虚函数20. 关于虚函数的描述中,正确的是(D)。
A)虚函数是一个静态成员函数B)虚函数是一个非成员函数C)虚函数既可以在函数说明时定义,也可以在函数实现时定义D)派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型二、填空题:1. 派生类对基类的继承有三种方式:_public_ __ 、_protected __ __ 和__private __ __ 。
2. 如果类Alpha继承了类Beta,则类Alpha称为__派生——类,类Beta称为__基 _类。
3. 设置虚基类的目的是为了消除二义性,可通过_virtual 标识虚基类。
4. 类继承中,缺省的继承方式是private ___________ 。
5. 当用protected 继承从基类派生宀个类时,基类的public 成员成为派生类的protected ___________ 员,protected 成员成为派生类的_ protected _ ________ 成员。
6 •指向基类的对象的指针变量也可以指向公有派生类的对象。
二、程序题1. 继承的工作方式,完成以下代码。
要求: (1)处继承方式为共有继承public , (2)处填写基类的ai , (3)处填写派生类的bi , (4)对象b的数据成员有哪些?ai,bi#i nclude<iostream.h>#i ncludevstri ng.h>class A{public:A(){ai=1;}protected:int ai;};class B: _____ A{public:B(){bi=2;}void display(){cout<< ___ (2) ___ <<(3)_ <<e ndl;}private:int bi;};int mai n(){B b;b.display();}2. 派生类的构造。
派生类的构造总是由基类的初始化开始的。
效果是:#i nclude<iostream.h> class A{ public:A(int i){x=i; cout<<"CA:"<<x<<endl;} 〜A(){cout<v"DA"vve ndl;} private: int x;};class B:public A{ public:B():_ A(90) {y=O;cout<v"CB"vvendl;}〜B(){cout<<"DB"<<e ndl;} private:int y;};int mai n(){B b;}3. 填写初始化列表,完成以下程序,使得屏幕输出:#i nclude<iostream.h> class A{ public:A(i nt i){x=i; cout<<x<<e ndl;} private: int x;class D{ public:D(i nt i){m=i;cout<<m<<e ndl;}private: int m;}; class B:public A{ public:B():_ A(90),d(19) {y=o;} private: int y;D d;};int mai n(){B b;}4. 请问以下程序输出什么?#i nclude<iostream.h> class A{ public:A(i nt i){x=i;} int x;};class B:public A{ public:B(int i):A(i+1){y=i;} int y;};void f1(A & ra){coutvvra.xvve ndl;}void f2(A * pa){cout<<pa->x<<e ndl;}int mai n()B b(3); f1(b); f2(&b);4答案:5. 请问以下程序输出什么?#i nclude<iostream.h>class A{public:void display(){cout<v"A"v<e ndl;} };class B:public A{public:void display(){cout<v"B"v<e ndl;} };void f(A &r){r.display();}int mai n(){B b;f(b);A a;f(a);6. 多态性,虚函数。
请问以下程序输出什么?#i nclude<iostream.h>class A{public:virtual void display(){cout<v"A"v<e ndl;} };class B:public A{public:virtual void display(){cout<<"B"<<e ndl;} };void f(A &r){r.display();}int mai n(){B b;f(b);A a;f(a);}6. 答案: 17. 请问以下程序输出什么?#i nclude<iostream.h>class A{public:virtual void display(){cout<<"A"<<e ndl;} };class B:public A{public:virtual void display(){cout<<"B"<<e ndl;} };class C:public A{public:virtual void display(){cout<v"C"v<e ndl;} };int mai n(){A a,aa;B b;C c,cc,ccc;A *pa[6]={&a,&aa,&b,&c,&cc, &ccc}; int i=0;for(i=0;i<6;++i)pa[i]->display();8.以下程序的屏幕输出是为何以下程序的屏幕输答案:出中会输出DA呢?请说明#in clude<iostream.h>class A{public:〜A(){cout«"DA ";}};class B:public A{public:〜B(){cout«"DB ";}};int mai n(){B b;}答案:定义类B对象b时,先调用基类A的构造函数,再调用派生类类B的构造函数。