C++习题3

更新时间:2024-03-27 11:18:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

习题3

一、选择题

1.在C++中,类与类之间的继承关系具有( ) A)自反性 B)对称性 C)传递性 D)反对称性

2.在公有继承的情况下,基类的成员(私有的除外)在派生类中的访问权限( ) A)受限制 B)保持不变 C)受保护 D)不受保护 3.按解释中的要求在下列程序划线处填入的正确语句是:( ) #include

class Base{ public:

void fun(){cout<<\;} };

class Derived:public Base{ public:

void fun()

{ //在此空格处调用基类的函数fun() cout<<\; } };

A)fun(); B)Base.fun(); C)Base::fun(); D)Base->fun();

4.在保护继承的情况下,基类的成员(私有的除外)在派生类中的访问权限( ) A)受限制 B)保持不变 C)受保护 D)不受保护

5.在哪种派生方式中,派生类可以访问基类中的protected成员( ) A)public和private B)public、protected和private C)protected和private D)仅protected

6.当一个派生类仅有protected继承一个基类时,基类中的所有公有成员成为派生类的() A) public成员 B) private成员 C) protected成员 D) 友元 7.不论派生类以何种方法继承基类,都不能使用基类的( )0

A) public成员 B) private成员 C) protected成员 D) public成员和protected成员

8下面叙述错误的是( )。

A)基类的protected成员在派生类中仍然是protected的

B)基类的protected成员在public派生类中仍然是protected的 C)基类的protected成员在private派生类中是private的 D)基类的protected成员不能被派生类的对象访问 9.下列说法中错误的是( )。

A) 保护继承时基类中的public成员在派生类中仍是public的 B)公有继承时基类中的private成员在派生类中仍是private的 C)私有继承时基类中的public成员在派生类中是private的 D)保护继承时基类中的public成员在派生类中是protected的 10下面叙述错误的是( )。

A)派生类可以使用private派生

B)对基类成员的访问必须是无二义性的 C)基类成员的访问能力在派生类中维持不变 D)赋值兼容规则也适用于多继承的组合

11派生类的构造函数的成员初始化列表中,不能包含( )。

A)基类的构造函数 B)派生类中子对象的初始化

C)基类中子对象的初始化 D)派生类中一般数据成员的初始化 12.下列虚基类的声明中,正确的是:( )

A)class virtual B: public A B)class B: virtual public A C)class B: public A virtual D)virtual class B: public A 13. .实现运行时的多态性采用( )

A)重载函数 B)构造函数 C)析构函数 D)虚函数 14.若一个类中含有纯虚函数,则该类称为( )

A) 基类 B) 纯基类 C) 派生类 D) 抽象类 15.假设A为抽象类,下列声明( )是正确的

A) A fun(int); B) A *p; C) int fun(A); D) A Obj; 16.在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值( )

A) 不同 B) 相同 C) 相容 D) 部分相同 17.下面函数原型声明中,()声明了fun为普通虚函数

A) void fun()=0; B) virtual void fun()=0; C) virtual void fun(); D) virtual void fun(){}; 18.在下面四个选项中, ()是用来声明虚函数的。

A)virtual B)public C)using D)false 19.实现运行时的多态性要使用()。 A)重载函数 B)构造函数 C)析构函数 D)虚函数

20.关于虚函数的描述中,正确的是()。 A)虚函数是一个静态成员函数 B)虚函数是一个非成员函数

C)虚函数既可以在函数说明时定义,也可以在函数实现时定义

D)派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型 二、填空题:

1.派生类对基类的继承有三种方式:__ __、___ __ 和___ __。 2.如果类Alpha继承了类Beta,则类Alpha称为__ __类,类Beta称为__ _类。 3. 设置虚基类的目的是__ __,可通过_________标识虚基类。 4. 类继承中,缺省的继承方式是___________。 5. 当用protected继承从基类派生→个类时,基类的public成员成为派生类的___________成员,protected成员成为派生类的_____ ____成员。

6.指向基类的对象的指针变量也可以指向__ 公有派生类 _的对象。 三、程序题

1. 继承的工作方式,完成以下代码。要求:(1)处继承方式为共有继承,(2)处填写基类的ai,(3)处填写派生类的bi,(4)对象b的数据成员有哪些? #include #include

class A{ public:

A(){ai=1;} protected: int ai; };

class B: ____(1)____ A{ public:

B(){bi=2;}

void display(){cout<<____(2)____<< ____(3)____<

int main() {

B b;

b.display(); }

2. 派生类的构造。派生类的构造总是由基类的初始化开始的。填写代码,完成基类的初始化。并且要求屏幕输出效果是: #include class A{ public:

A(int i){x=i; cout<<\ ~A(){cout<<\ private:

int x; };

class B:public A{ public:

B():___(1)___{y=0;cout<<\ ~B(){cout<<\ private:

int y; };

int main() {

B b; }

3. 填写初始化列表,完成以下程序,使得屏幕输出: #include class A{ public:

A(int i){x=i; cout<

int x; };

class D{ public:

D(int i){m=i;cout<

int m; };

class B:public A{ public:

B():__(1)___{y=0;} private: int y; D d; };

int main() {

B b; }

4. 请问以下程序输出什么? #include 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<

void f2(A * pa) { cout<x<

int main() {

}

B b(3); f1(b); f2(&b);

5. 请问以下程序输出什么? #include class A{ public: void display(){cout<<\};

class B:public A{ public: void display(){cout<<\};

void f(A &r) { r.display(); }

int main() { B b; f(b); A a; f(a); }

6. 多态性,虚函数。

请问以下程序输出什么? #include class A{ public: virtual void display(){cout<<\};

class B:public A{ public: virtual void display(){cout<<\};

void f(A &r) { r.display(); }

int main()

{ B b; f(b); A a; f(a); }

7. 请问以下程序输出什么? #include class A{ public: virtual void display(){cout<<\};

class B:public A{ public: virtual void display(){cout<<\};

class C:public A{ public: virtual void display(){cout<<\};

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. 以下程序的屏幕输出是:。为何以下程序的屏幕输出中会输出DA呢?请说明。 #include class A{ public: ~A(){cout<<\};

class B:public A{ public: ~B(){cout<<\};

int main() { B b;

}

1答案:(1)public (2)ai (3)bi (4)ai、bi

2.答案:A(90)

3.答案:A(90),d(19) 4答案: 5. 答案: 6.答案: 7. 答案:

8.答案:定义类B对象b时,先调用基类A的构造函数,再调用派生类类B的构造函数。析构时正好相反,先析构B类,再析构A类。 选择

CBCCB CBAAC CBDDB BCADD

填空:

1.public__、___protected__ 和___private 2.派生,基类

3.为了消除二义性virtual 4. private

5. _protected_protected 6. 公有派生类 1

本文来源:https://www.bwwdw.com/article/l4zr.html

Top