当前位置:文档之家› C++习题3(继承和多态)

C++习题3(继承和多态)

习题3一、选择题1.在C++中,类与类之间的继承关系具有( C )A)自反性B)对称性C)传递性D)反对称性2.在公有继承的情况下,基类的成员(私有的除外)在派生类中的访问权限( B )A)受限制B)保持不变C)受保护D)不受保护3.按解释中的要求在下列程序划线处填入的正确语句是:( C )#include <iostream.h>class Base{public:void fun(){cout<<"Base::fun"<<endl;}};class Derived:public Base{public:void fun(){ //在此空格处调用基类的函数fun()cout<<"Derived::fun"<<endl;}};A)fun();B)Base.fun();C)Base::fun();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: virtual public 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(int); 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)using 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#include<iostream.h>#include<string.h>class A{public:A(){ai=1;}protected:int ai;};class B: _____ A{public:B(){bi=2;}void display(){cout<<____(2)____<<____(3)____<<endl;}private:int bi;};int main(){B b;b.display();}2.派生类的构造。

派生类的构造总是由基类的初始化开始的。

填写代码,完成基类的初始化。

并且要求屏幕输出效果是:#include<iostream.h>class A{public:A(int i){x=i; cout<<"CA:"<<x<<endl;}~A(){cout<<"DA"<<endl;}private:int x;};class B:public A{public:B():_A(90)_{y=0;cout<<"CB"<<endl;}~B(){cout<<"DB"<<endl;}private:int y;};int main(){B b;}3.填写初始化列表,完成以下程序,使得屏幕输出:#include<iostream.h>class A{public:A(int i){x=i; cout<<x<<endl;} private:int x;};class D{public:D(int i){m=i;cout<<m<<endl;} private:int m;};class B:public A{public:B():_A(90),d(19){y=0;}private:int y;D d;};int main(){B b;}4.请问以下程序输出什么?#include<iostream.h>class A{public:A(int i){x=i;}int x;};class B:public A{public:B(int i):A(i+1){y=i;}int y;};void f1(A & ra){cout<<ra.x<<endl;}void f2(A * pa){cout<<pa->x<<endl;}int main(){B b(3);f1(b);f2(&b);}4答案:5.请问以下程序输出什么?#include<iostream.h>class A{public:void display(){cout<<"A"<<endl;} };class B:public A{public:void display(){cout<<"B"<<endl;} };void f(A &r){r.display();}int main(){B b;f(b);A a;f(a);}5.答案:6.多态性,虚函数。

请问以下程序输出什么?#include<iostream.h>class A{public:virtual void display(){cout<<"A"<<endl;} };class B:public A{public:virtual void display(){cout<<"B"<<endl;} };void f(A &r){r.display();}int main(){B b;f(b);A a;f(a);}6.答案:7.请问以下程序输出什么?#include<iostream.h>class A{public:virtual void display(){cout<<"A"<<endl;} };class B:public A{public:virtual void display(){cout<<"B"<<endl;} };class C:public A{public:virtual void display(){cout<<"C"<<endl;} };int main(){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.以下程序的屏幕输出是:。

相关主题