C++习题第07章 继承和派生

C++习题第07章 继承和派生
C++习题第07章 继承和派生

第07章继承和派生

(1)面向对象程序设计的____机制实现了代码重用,有效地缩短了程序的开发周期。(2)在继承关系中,被继承的类称为____,通过继承关系定义出来的新类称为_____。(3)派生类的继承方式有____ ,____ 和____3种,其中默认的继承方式为____.。

(4)公有继承时,基类的私有成员为跑生类的____成员,基类的保护成员成为派生类的____成员,基类的公有成员成为派生类的____成员。

(5)在派生类中不能访问基类的____成员,这符合面向对象程序设计的封装思想。(6)C++语言不仅支持____继承,也支持____继承。

(7)可以把派生类的对象当做基类对象来处理,这是____的概念。

(8)根据联编实现的不同极端,可将其分为____联编和____联编两种。

(9)声明了纯虚函数的类,称为____。

2.选择题

(1)下列关于派生类的描述中,不正确的是()

A)派生类的成员除了包含它自己的成员的访问权限在派生类中保持不变

B)派生类中继承的基类

C)派生类至少有个一个基类

D)一个派生类可以作为另一个派生的基类

(2)在保护继承中,基类的私有成员变成派生类的()

A)不可访问成员B)稀有成员C)保护成员D)公有成员

(3)若有如下类声明:

Class Base

{ int k;

Public:

Void set(int n){k=n;}

Int get()const{return k;}

};

Class Derived:protected Base

{protected:

Int j;

Public:

Void set(int m,int n)

{ Base::set(m);

j=n;

}

Int get()const

{ return Base::get()+j;

}

};

则类Derived中保护的数据成员和成员函数的个数是()

A)4 B)3 C)2 D)1

(4)在派生类的结构函数的初始化表中,不能包含()

A)基类的构造函数B)派生类的一般数据成员的初始化

C)基类的子对象的初始化D)派生类的子对象的初始化

(5)若如下类声明:

Class X

{ int x;

Public:

X(int n){x=n;}

};

Class Y:public X

{ int y;

Public;

Y(int a,int b);

};

在构造函数Y的下列定义中,正确的是()

A)Y::Y(int a,int b):x(a),y(b){} B)Y::Y(int a,int b):X(a),y(b){}

C) Y::Y(int a,int b):x(a),Y(b){} D)Y::y(INT A,INT B):X(a),Y(b){}

(6)在多重继承中,对于基类成员在派生类中的访问权限与单继承的规矩()A)完全相同B)完全不同C)部分相同D)以上均不正确

(7)下列说法中不正确的是()

A)私有继承时,基类的公有成在派生中是私有成员

B)保护继承时,基类的公有成在派生中是保护成员

C)私有继承时,基类的公有成在派生中是公有成员

D)私有继承时,基类的私有成在派生中是私有成员

(8)下列关于赋值兼容规则的描述中不正确的是()

A)派生类的对象可以赋值给基类对象

B)基类的对象可以赋值给派生的对象

C)派生类的对象可以初始化为基类的引用

D)派生类对象的地址可以赋值个指向基类的指针

(9)下列关于虚类的描述中,不正确的是()

A)使用虚基类的目的是消除多重继承下的二义性

B)虚基类中的子对象的初始化次数与该虚基类的派生类的个数有关

C)虚基类的多层派生类结构函数的成员初始化列表中都要列出对虚基类构造函数的调用

(10)运行时的多态性上指()

A)用指向对象的基类指针或引用调用一个纯虚函数

B)用指向对象的基类指针或用调用一个虚函数

C)以任何方式调用一个纯虚函数

D)以任何方式调用一个虚函数

(11)在C++中,用于现实运行时多态性的是()

A)内联函数B)重载函数C)摸板函数D)虚函数

(12)下列关于虚函数的描述中,正确的是()

A)从虚基类继承的函数都是虚函数B)虚函数不得是静态成员函数

B)只能通过指针或引用调用虚函数D)抽象类中的成员函数都虚函数

3.

(1)

#include

class A

{public:

Int al;

Protected:

Int a2;

Private:

Int a3;

};

Class B:publicA

{public:

Int b1;

proteted:

Int b2;

Private:

Int b3;

};

Void B::fb()

{ a1=10;a2=20a3=30:

B1=100;b2=100;b3=100;

}

Void main()

{ A x;

B y;

x.a1=10;x.a2=20,x.a3=30;

y.a1=100;y.a2=200;y.a3=300;

y.b1=1000;y.b2=2000;y.b3=3000;

}

(2)

#include

Using namespace std;

Class Base

{ private:

Void funl() con

4. 读程序写结果

5.简答题

(1)派出类的继承方式有哪几种?各种继承方式各有什么特点?

(2)在继承方式的派出类构造函数中如何对基类的数据成员初始化?各构造函数被调用的顺序和机理是什么?请举例说明。

(3)什么是虚基类?它的作用是什么?

(4)什么是抽象类?抽象类的主要作用是什么?

6.编程题

(1)分别定义一个日期类和时间类,然后派生出一个新的日期时间类。请以继承方式实现

该类。

(2)在例7-16 胡基础上,由Student 类和Teacher 类派生出一个描述在职读书的教师的

类,并编写出相对应的测试代码。

(3)设计一个抽象类,并由它派生出圆柱体、球体和正方体3个类,实现计算圆柱体、球

体和正方体表面积和体积;要求按照运行时多态性的方法设计主函数,进行测试。

习题参考答案

第1章C++语言概述

1.填空题

(1)函数说明,函数体

(2)声明区,主程序区,函数定义区

(3)多态性

(4)namespace,using

(5)std

(6)cin,>>

(7)//

(8)对数据的操作

2.判断题

(1)对(2)错(3)错(4)错(5)错

3.改错题

(1)没有函数体,应改为

void main() {};

(2)语句没有分号,应改为

using namespace myspace;

(3)cout和操作符<<共同完成输出的功能,应改为

cout<<" Input your name:";

(4)应改为

#include

4.简答题(略)

5.编程题(略)

第2章基本数据类型、运算符与表达式1.选择题

(1)B (2)D (3)B (4)D (5)B

2.简答题

(1)(a)、(c)(e)、(f)、(g)、(h)、(i)

(2)(a)、(g)、(i)、(j)

(3)

(a)5.5

(b)0

(c)20

(d)0,0

(e)1

(f)1,2

(g)3

(h)-40

(i)2

(j)3

(k)s1>='0'&&s1<='9'

(l)N!=0

3.读程序写结果

(1)0,15

(2)(1、1、1),(-1、-1、-1)

(3)

(a)a*a+2*a*b+b*b

(b)4.0/3.0*3.1415926*R*R*R

(c)5.0/9.0*(F-32)

(d)b>=a&&b<=c

(4)

36

41

43

(5)

x=1

4.编程题(略)

第3章C++的控制语句1.选择题

(1)B (2)A (3)A (4)C (5)A

2.判断题

(1)错(2)对(3)对(4)错(5)错

3.读程序写结果

(1)

1

2 2

3 3 3

4 4 4 4

5 5 5 5 5

(2)

1

1 2 1

1 2 3 2 1

1 2 3 4 3 2 1

1 2 3 4 5 4 3 2 1

(3)

j的值为0;

i的值为2;

4.编程题(略)

第4章函数1.填空题

(1)void

(2)静态全局变量,static

(3)函数重载

(4)inline

(5)递归函数

(6)宏定义命令,文件包含命令,条件编译命令2.判断题

(1)错(2)错(3)错(4)错(5)错

(6)对(7)错(8)错(9)对(10)对

3.读程序写结果

(1)

x=7,y=4

x=9,y=5

(2)

34.56

101

(3)

16

22

28

(4)

12 15 18 21 24

(5)

2,1,4,1,3,2,1,

4.简答题(略)

5.编程题(略)

第5章构造数据类型1.选择题

(1)C (2)D (3)A (4)B (5)C

2.判断题

(1)错(2)对(3)对(4)错(5)错3.读程序写结果

(1)

153

(2)

42

2 5 6 8 10

(3)

65535,21

(4)

4

19

(5)

6904

(6)

4

3

2

1

4.编程题(略)

第6章类和对象

1.填空题

(1)类,对象,类

(2)数据成员,成员函数

(3)不能

(4)private,protected,public,private

(5)成员函数

(6)friend

(7)类名,作用域运算符

(8)对象名.成员名,指针变量名->成员名,(*指针变量名).成员名

(9)构造,析构,构造,析构

(10)常量数据,引用数据

(11)全局,数据类型,所属的类

(12)常成员,只读

(13)成员,友元

(14)类数据成员,类成员函数

(15)this

(16)浅拷贝

2.选择题

(1)C (2)C (3)B (4)C (5)B

(6)C (7)D (8)B (9)C (10)D

(11)A (12)C (13)D (14)D (15)B

3.改错题

(1)man1.salary=1000.00; 不能在类外访问类的私有成员

(2)float r=0;和float c=0; 类本身是抽象的,不能在类的定义体中给其数据成员赋值}后缺少分号“;”

(3)成员函数void setdata(float x1,float y1,float r);没有实现

(4)构造函数名point()应与类名同名,为Point

没有头文件包含#include

4.读程序写结果题

(1)

x=0,y=0

x=100,y=200

(2)

x=100,y=200

x=1000,y=2000

t=3.14

(3)

Sta::fun2()=10

s.fun2()=11

r.a=20

(4)

Constructor1 called!

x=0

Constructor2 called!

x=100

Destructor called!

Destructor called!

(5)

57

5.简答题(略)

6.编程题(略)

第7章继承和派生

1.填空题

(1)继承

(2)基类,派生类

(3)private,protected,public,private

(4)不可访问,保护,公有

(5)私有

(6)单(一),多(重)

(7)赋值兼容规则

(8)静态,动态

(9)抽象类

2.选择题

(1)B (2)A (3)B (4)C (5)B

(6)A (7)D (8)B (9)B (10)B

(11)D (12)B

3.改错题

(1)本题的错误主要是数据成员的访问权限问题:基类的私有成员在派生类中不可访问,如fb()函数中的a3=30;语句;类的私有和保护成员在类外不能访问,如main函数中的x.a2 =20;.a3=30; ,y.a2=200; ,y.a3=300; ,y.b2=2000;和y.b3=3000;语句。

(2)本题的错误主要是成员函数的访问权限问题:由于派生类Derived是基类Base 的保护派生类,所以基类中的私有成员变成派生类的不可访问成员,而基类的保护和公有成员则变成派生类的保护成员。对于类的不可访问和保护成员在类外是不能访问的,故main 函数中的语句obj.funl();,obj.fun2(); 和obj.fun3(); 是错误的。

4.读程序写结果题

(1)

d=110

b=190

d=110

d=110

(2)

d=110

b=190

d=110

b=90

(3)

基类B1的构造函数被调用

基类B3的构造函数被调用

基类B2的构造函数被调用

派生类D的构造函数被调用

派生类D的析构函数被调用

基类B2的析构函数被调用

基类B3的析构函数被调用

基类B1的析构函数被调用(4)

A

B

C

D

D

(5)

A

B

D

D

(6)

A

A

B

D

D

(7)

A

B

C

D

D

(8)

5

25

5.简答题(略)

6.编程题(略)

第8章运算符重载1.填空题

(1)函数重载

(2)重载为类的成员函数,重载为类的友元函数(3)Operator

(4)1,2

(5)友元

2.选择题

(1)B (2)D (3)A (4)D (5)B

(6)C (7)C (8)C

3.简答题(略)

4.编程题(略)

第9章模板1.填空题

(1)类模板,函数模板

(2)类,对象

(3)数据类型

(4)fun(5)

2.选择题

(1)C (2)B (3)C (4)B (5)D

3.简答题(略)

4.编程题(略)

第10章文件1.填空题

(1)FILE,stdio.h

(2)stdio.h,fopen,fclose

(3)顺序,随机

(4)cin,>>,cout,<<

(5)ios

(6)fstream,open,close

(7)文件指针的当前位置,文件开头,文件尾

2.选择题

(1)B (2)B (3)A (4)D (5)B

(6)D (7)C (8)B (9)A (10)B

3.简答题(略)

4.编程题(略)

第11章string类与标准模板库STL 1.填空题

(1)字符数组,string类

(2)string

(3)容器,迭代器,算法

(4)顺序,关联

(5)指针

(6)函数模板

2.简答题(略)

3.编程题(略)

第12章异常处理

1.填空题

(1)throw,try,catch

(2)多

(3)数据类型

(4)catch(…)

(5)相反

2.判断题

(1)错(2)对(3)错(4)错(5)错

3.简答题(略)

4.编程题(略)

继承和派生习题

继承和派生习题 1 分析以下程序的执行结果 #include class base { public: base(){cout<<"constructing base class"< class base { int n; public: base(int a) { cout<<"constructing base class"<

C 第八章继承与派生习题习题解答

第八章继承与多态习题 一.基本概念与基础知识自测题 8.1填空题 8.1.1 如果类α继承了类β,则类α称为(1)类,而类β称为(2)类。(3)类 的对象可作为(4)类的对象处理,反过来不行,因为(5)。如果强制转换则要注意(6)。 答案:(1)基类 (2)派生类 (3)派生类 (4)基类 (5)派生类有一些新成员 (6)只能派生类强制转换为基类 8.1.2 当用public继承从基类派生一个类时,基类的public成员成为派生类的(1)成员, protected成员成为派生类的(2)成员,对private成员是(3)。公有派生可以使其类的(4),所以公有派生是主流。 答案:(1)public成员 (2)protected成员 (3)不可访问 (4)接口不变 8.1.4 一个派生类只有一个直接基类的情况称为(1),而有多个直接基类的情况称为 (2)。继承体现了类的(3)概念,这在MFC中得到了很好表现,MFC中只采用了(4)。 答案:(1)单继承 (2)多重继承 (3)层次 (4)单继承 8.1.6 C++中多态性包括两种多态性:(1)和(2)。前者是通过(3)实现的, 而后者是通过(4)和(5)来实现的。 答案:(1)编译时的 (2)运行时的 (3)函数和运算符的重载 (4)类继承关系 (5)虚函数 8.2简答题(以下习题题号可能和教材不一致!) 8.2.1构造函数和析构函数可以继承吗?派生类构造函数各部分的执行次序是怎样的?答:构造函数和析构函数不可以继承。派生类构造函数各部分的执行次序是: 1.调用基类构造函数,按它们在派生类声明的先后顺序,依次调用。 2.调用新增成员对象的构造函数,按它们在类定义中声明的先后顺序,依次调用。 3.派生类的构造函数体中的操作。 8.2.2什么叫派生类的同名覆盖(override)?

c练习题带答案

c练习题带答案集团标准化工作小组 #Q8QGGQT-GX8G08Q8-

一、选择题 1.C++语言属于( C )。 A)自然语言 B)机器语言 C)面向对象语言 D)汇编语言2.下面选项中不属于面向对象程序设计特征的是(C) 。 A)继承性 B)多态性 C)相似性 D)封装性 3.可用作C++语言用户标识符的一组标识符是( B )。 A) void define +WORD B) a3_b3 _123 YN C) for -abc Case D) 2a DO sizeof 4.假定一个二维数组的定义语句为“int a[3][4]={{3,4},{2,8,6}};”,则元素 a[2][1]的值为(A)。 A) 0 B) 4 C) 8 D) 6 5.下列情况中,哪一种情况不会调用拷贝构造函数( B ) A)用派生类的对象去初始化基类对象时 B)将类的一个对象赋值给该类的另一个对象时 C)函数的形参是类的对象,调用函数进行形参和实参结合时 D)函数的返回值是类的对象,函数执行返回调用者时 6.以下哪一关键字可用于重载函数的区分(C) A)extern B)static C)const D)virtual 7.下列有关数组的叙述中,正确的是( B ) A)C++中数组的存储方式为列优先存储 B)数组名可以作为实参赋值给指针类型的形参 C)数组下标索引从1开始,至数组长度n结束 D)数组指针的语法形式为:类型名 *数组名[下标表达式]; 8.下列有关继承和派生的叙述中,正确的是( C ) A)派生类不能访问通过私有继承的基类的保护成员 B)多继承的虚基类不能够实例化 C)如果基类没有默认构造函数,派生类就应当声明带形参的构造函数 D)基类的析构函数和虚函数都不能够被继承,需要在派生类中重新实现 9.实现运行时多态的机制是( A ) A)虚函数B)重载函数C)静态函数D)模版函数 10.若有下面的函数调用: fun(a+b, 3, max(n-1, b)); 其中实参的个数是( A) A)3 B)4 C)5 D)6 11.下列关于this指针的说法正确的是( B)

继承与多态习题

继承与多态习题 一.基本概念与基础知识自测题 8.1填空题 8.1.1 如果类α继承了类β,则类α称为(1)类,而类β称为(2)类。(3)类 的对象可作为(4)类的对象处理,反过来不行,因为(5)。如果强制转换则要注意(6)。 答案:(1)基类 (2)派生类 (3)派生类 (4)基类 (5)派生类有一些新成员 (6)只能派生类强制转换为基类 8.1.2 当用public继承从基类派生一个类时,基类的public成员成为派生类的(1)成员, protected成员成为派生类的(2)成员,对private成员是(3)。公有派生可以使其类的(4),所以公有派生是主流。 答案:(1)public成员 (2)protected成员 (3)不可访问 (4)接口不变 8.1.3 利用继承能够实现(1)。这种实现缩短了程序开发的时间,VC++中的(2)很 好地体现了这一点。 答案:(1)代码的复用 (2)MFC编程 8.1.4 一个派生类只有一个直接基类的情况称为(1),而有多个直接基类的情况称为 (2)。继承体现了类的(3)概念,这在MFC中得到了很好表现,MFC中只采用了(4)。 答案:(1)单继承 (2)多重继承 (3)层次 (4)单继承 8.1.5 C++中多态性包括两种多态性:(1)和(2)。前者是通过(3)实现的, 而后者是通过(4)和(5)来实现的。 答案:(1)编译时的 (2)运行时的 (3)函数和运算符的重载 (4)类继承关系 (5)虚函数 8.1.6 在基类中将一个成员函数说明成虚函数后,在其派生类中只要(1)、(2)和

(3)完全一样就认为是虚函数,而不必再加关键字(4)。如有任何不同,则认为是(5)而不是虚函数。除了非成员函数不能作为虚函数外,(6)、(7)和(8)也不能作为虚函数。 答案:(1)同虚函数名 (2)同参数表 (3)同返回类型。如基类中返回基类指针,而派生类中返回派生类指针是允许的 (4)virtual (5)重载 (6)静态成员函数 (7)内联函数 (8)构造函数 8.1.7 纯虚函数定义时在函数参数表后加(1),它表明程序员对函数(2),其本质 是将指向函数体的指针定为(3)。 答案:(1)=0 (2)不定义 (3)NULL 8.2简答题 8.2.1构造函数和析构函数可以继承吗?派生类构造函数各部分的执行次序是怎样的?答:构造函数和析构函数不可以继承。派生类构造函数各部分的执行次序是: 1.调用基类构造函数,按它们在派生类声明的先后顺序,依次调用。 2.调用新增成员对象的构造函数,按它们在类定义中声明的先后顺序,依次调用。 3.派生类的构造函数体中的操作。 8.2.2什么叫派生类的同名覆盖(override)? 答:如果派生类声明了一个和某个基类成员同名的新成员(当然如是成员函数,参数表也必须一样,否则是重载),派生类中的新成员就屏蔽了基类同名成员,类似函数中的局部变量屏蔽全局变量。称为同名覆盖(override)。 8.2.3派生类的析构函数中需完成什么任务?是否要编写对基数和成员对象的析构函数的 调用?为什么? 答:析构函数的功能是作善后工作,析构函数无返回类型也没有参数,情况比较简单。派生类析构函数定义格式与非派生类无任何差异,不要编写对基数和成员对象的析构函数的调用,只要在函数体内把派生类新增一般成员处理好就可以了,因为对新增的成员对象和基类的善后工作,系统会自己调用成员对象和基类的析构函数来完成。 8.2.4为什么要使用虚基类?怎样定义虚基类?用一个实例来解释虚基类在其派生类中的 存储方式。 答:在多重继承是有可能出现同一基类的两个拷贝,为避免这种情况,可使用虚基类。虚基类(virtual base class)定义方式如下: class派生类名:virtual 访问限定符基类类名{...}; class派生类名:访问限定符virtual基类类名{...}; virtual 关键字只对紧随其后的基类名起作用。

c++实验3 派生类与继承1

实验三派生类与继承 一、实验目的 1、学习类的继承,能够定义和使用类的继承关系。 2、学习派生类的声明与定义方法。 3、掌握类的定义和对象的声明。 4、熟悉公有派生和私有派生的访问特性。 5、掌握派生类构造函数和析构函数的执行顺序。 6、掌握利用访问声明调整基类成员在派生类中的访问属性。 二、试验内容 1、下面的程序可以输出ASCII字符与所对应的数字的对照表。修改下列程序,使其可以输出字母a到z(或任意两个字符间)与所对应的数字的对照表。class table { public: table(int p) { i=p; } void ascii(void); protected: int i; }; void table::ascii(void) { int k=1; for (;i<127;i++) { cout<

c=m; } void print(void); protected: char *c; }; void der_table::print(void) { cout< using namespace std; #include class table { public: table(int p) { i=p; } void ascii(void); protected: int i; }; void table::ascii(void) { int k=1; for (;i<=122;i++)

C++继承与派生类习题

第九章继承与派生类 9.2 典型例题分析与解答 例题1:下列对派生类的描述中,()是错误的。 A.一个派生类可以作为另一个派生类的基类 B.派生类至少有一个基类 C.派生类的成员除了它自己的成员外,还包含了它的基类成员 D.派生类中继承的基类成员的访问权限到派生类保持不变 答案:D 分析:一个派生类可以作为另一个派生类的基类。无论是单继承还是多继承,派生类至少有 成 的成员时可能出现二义性。消除二义性的方法是采用作用域运算符。派生类和它的基类中出现同名函数时,不可能出现二义性。 例题4:多继承派生类构造函数构造对象时,()被最先调用。 A.派生类自己的构造函数 B.虚基类的构造函数 C.非虚基类的构造函数D.派生类中子对象类的构造函数 答案:B 分析:多继承派生类构造函数构造对象时,构造函数的调顺序是:虚基类的构造函数,派生类中子对象类的构造函数,派生类自己的构造函数。

例题5:C++类体系中,能被派生类继承的是()。 A.构造函数B.虚函数C.析构函数D.友元函数答案:B 分析:C++类体系中,构造函数、析构函数和友元函数是不能被派生类继承的. 例题6:设有基类定义: class Cbase { private: int a; protected: int b; public: int c; }; 用派生类中子对象类的析构函数,最后调用基类的析构函数。 例题11:设有以下类的定义: class A class B: protected A class C: private B { int A1; { int b1; { int c1; protected: int A2; protected: int b2; protected: int c2; public: int A3; public: int b3; public: int c3; }; }; }; 请按访问权限写出派生类C中具有的成员。 私有成员: (1)

实验3 继承和派生类的应用

3.1实验目的 1.掌握多重继承和派生类的方法 2.掌握初始化基类成员的方法 3.掌握定义虚基类的方法 3.2实验内容与步骤 1.上机实验题一 定义一个日期(年、月、日)的类和一个时间(时、分、秒)的类,并由这两个类派生出日期和时间类。主函数完成基类和派生类的测试工作。 ⑴分析 定义一个描述日期的类,构造函数完成年、月、日的初始化,包含一个重新设置日期的成员函数,一个获取日期的成员函数。该类可定义为: class Date{ int Year,Month,Day; //分别存放年、月、日 public: Date(int y=0, int m=0,int d=0) { Year= y; Month = m; Day = d; } void SetDate(int ,int ,int ); void GetDate(char *); }; 函数SetDate完成数据成员的赋初值。函数GetDate要将整数年、月、日变换成字符串后,存放到参数所指向的字符串中。把一个整数变换成字符串可通过库函数: char * _itoa(int a , char *s, int b); 来实现,参数a为要变换的整数,b为数制的基数(如10,表示将a转换为对应的十进制的字符串),转换的结果存放到s所指向的字符串中。函数返回变换后字符串的首指针。该成员函数可以是: void Date::GetDate(char *s) { char t[20];

_itoa(Year,s,10); //将年变换为字符串表示 strcat(s,"/"); //年、月、日之间用“/”隔开 _itoa(Month,t,10); //将月变换为字符串表示 strcat(s,t); //将年、月字符串拼接 strcat(s,"/"); _itoa(Day,t,10); strcat(s,t); //将年、月、日拼接成一个字符串} 定义描述时间的类与描述日期的类类同,然后用这二个类作为基类,公有派生出描述日期和时间的类。 简化的参考程序如下: #include #include #include class Date{ int Year,Month,Day; //分别存放年、月、日 public: Date(int y=0, int m=0,int d=0) { Year= y; Month = m; Day = d; } void SetDate(int ,int ,int ); void GetDate(char *); }; void Date::SetDate(int y,int m,int d ) { Year= y; Month = m; Day = d; } void Date::GetDate(char *s) { char t[20]; _itoa(Year,s,10); strcat(s,"/"); _itoa(Month,t,10); strcat(s,t); strcat(s,"/"); _itoa(Day,t,10); strcat(s,t); } class Time { int Hours,Minutes,Seconds; //时、分、秒 public: Array Time(int h=0,int m=0, int s=0)

内蒙古科技大学面向对象的程序设计实验8 继承(一)

内蒙古科技大学 面向对象的程序设计 实验报告 一、实验目的 1.理解继承的含义以及声明; 2.理解共有派生、私有派生和保护派生的含义以及使用; 3.理解单派生类中构造函数和析构函数的调用顺序。 二、实验环境 编译器:Visual C++ 6.0. 操作系统:Windows 7 旗舰版 三、实验内容 2.1练习(一): 1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。 #include "iostream.h" class CBase { public: CBase(int a) :a(a) {

} protected: void print() { cout<<"a="<

c++实验8继承与派生上机练习题

1. 定义一个哺乳动物类Mamma,l 并从中派生出一个狗类Dog,要求: ( 1) 添加Dog 类的颜色数据成员,访问属性为私有,通过函数来对颜色进行设置和获取。 ( 2) 分别为基类和派生类添加相应的构造函数(有参、无参) 测试。 class Mammal { protected: int itsAge; int itsWeight; public: int GetAge(){return itsAge;} void SetAge(int age) {itsAge=age;} int GetWeight() { return itsWeight;} void SetWeight(int weight) {itsWeight= weight;} }; class Dog : public Mammal { // 定义Dog 类的数据成员和成员函数 }; 改: #include #include using namespace std; class Mammal { protected: int itsAge; int itsWeight; public: Mammal(); ~Mammal(); int GetAge(){return itsAge;} void SetAge(int age) {itsAge=age;} int GetWeight() { return itsWeight;} void SetWeight(int weight) {itsWeight= weight;} }; class Dog : public Mammal {下面给出Mamma类的定义,SetColor 和GetColor 成员和析构函数,并进行

实验四 继承与派生

实验四继承与派生 一、实验目的: 掌握利用单继承和多重继承的方式定义派生类的方法; 深刻理解在各种继承方式下构造函数和析构函数的执行顺序; 理解和掌握公有继承,私有继承和保护继承对基类成员的访问机制; 理解虚基类的概念以及引入虚基类的目的和作用。 二、实验时间: 三、实验地点: 四、实验内容: 1.运行以下程序,并对运行结果进行分析 #include"stdafx.h" #include using namespace std; class base{ int n; public: base(int a) {cout<<"constructing base class"<

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

一、选择题 1. 在C++中,类与类之间的继承关系具有(C ) A)自反性B)对称性C)传递性D)反对称性 2. 在公有继承的情况下,基类的成员(私有的除外)在派生类中的访问权限(B A)受限制B)保持不变C)受保护D)不受保护 3. 按解释中的要求在下列程序划线处填入的正确语句是: (C ) #in elude class Base{ public: void fun(){coutfun(); 4. 在保护继承的情况下,基类的成员(私有的除外)在派生类中的访问权限(C ) A)受限制B)保持不变C)受保护D)不受保护 5. 在哪种派生方式中,派生类可以访问基类中的protected 成员(B ) A)public 禾口private B)public 、protected 禾口 private C)protected 禾口private D)仅protected

6. 当一个派生类仅有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 A C)class B: public A virtual D)virtual class B: public A 13..实现运行时的多态性采用(D ) A)重载函数B)构造函数C)析构函数D)虚函数 14. 若一个类中含有纯虚函数,则该类称为(D )

c++实验三继承和派生类(附答案)

实验三继承和派生类 实验目的和要求 1.理解类的继承的概念,能够定义和使用类的继承关系。 2.掌握派生类的声明与定义方法。 3.熟悉公有派生和私有派生的访问特性。 4.学习虚基类在解决二义性问题中的作用。 实验内容 1.先阅读下面的程序,分析程序运行的结果,然后再上机运行程序,验证自己分析的结果是否正确。 (1) #include<> class A { public: A() { cout<<"A::A() called.\n"; } ~A() { cout<<"A::~A() called.\n"; } }; class B:public A { public: B(int i) { cout<<"B::B() called.\n"; buf=new char[i]; } ~B() { delete []buf; cout<<"B:~B() called.\n"; } private: c har *buf; }; void main() {

B b(10); } (2) #include<> class A { public: A(int a,int b):x(a),y(b) { cout<<"A constructor..."<

实验六继承与派生

继承与组合 一、实验目的 1.了解继承在面向对象程序设计中的重要作用。 2.进一步理解继承与派生的概念。 3.掌握通过继承派生出一个新的类的方法。 4.了解虚基类的作用和用法。 5.掌握类的组合 二、实验内容 1.请先阅读下面的程序,写出程序运行的结果,然后再上机运行程序,验证自己分析的结果是否正确。 (1) #include using namespace std; class A {public: A(){cout<<"A::A() called.\n";} virtual ~A(){cout<<"A::~A() called.\n";} }; class B:public A {public: B(int i) { cout<<"B::B() called.\n";

buf=new char[i]; } virtual ~B() { delete []buf; cout<<"B::~B() called.\n"; } private: char *buf; }; void fun(A *a) { cout<<"May you succeed!"<

A::A() called. B::B() called. May you succeed! B::~B() called. A::~A() called. (2) #include using namespace std; class A{ public: A(int a,int b):x(a),y(b){ cout<<"A constructor..."<

相关文档
最新文档