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 《面向对象程序设计》习题 班级:学号:姓名:名单序号:成绩: 第3章继承与派生 一、选择题(共28分,每题1分) 1.下列对派生类的描述中,()是错误的。 A.一个派生类可以作为另一个派生类的基类 B.派生类至少有一个基类 C.派生类的成员除了它自己的成员外,还包含了它的基类成员 D.派生类中继承的基类成员的访问权限到派生类保持不变 2.派生类的对象对它的哪一类基类成员是可以访问的?() A.公有继承的基类的公有成员 B. 公有继承的基类的保护成员 C. 公有继承的基类的私有成员 D. 保护继承的基类的公有成员 3.关于多继承二义性的描述,()是错误的。 A.派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性B.一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性 C.解决二义性最常用的方法是作用域运算符对成员进行限定 D.派生类和它的基类中出现同名函数时,将可能出现二义性 4.多继承派生类构造函数构造对象时,()被最先调用。 A.派生类自己的构造函数B.虚基类的构造函数 C.非虚基类的构造函数D.派生类中子对象类的构造函数 5.C++类体系中,能被派生类继承的是()。 A.构造函数B.虚函数C.析构函数D.友元函数 6.设有基类定义: class Cbase { private: int a; protected: int b; public: int c; }; 派生类采用何种继承方式可以使成员变量b成为自己的私有成员( ) A. 私有继承 B.保护继承 C. 公有继承 D.私有、保护、公有均可 7.C++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过()派生了新的类。 A.复用 B.继承 C.封装 D.引用 8.继承具有(),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。 A.规律性 B.传递性 C.重复性 D.多样性 实验目的与要求: 1.掌握类的继承与派生关系以及实验方法,理解类的层次结构。 2.掌握派生类构造函数初始化基类成员和对象成员的方法。 3.掌握内联函数和默认函数。 4.掌握赋值兼容原则,掌握派生类的复制构造函数和赋值运算符的定义。 实验过程及内容: 1.实践教程实验二十二P81范例:定义一个继承与派生关系的类体系,在 派生类中访问基类成员。 ①先定义一个点类,包含x,y坐标数据成员,显示函数和计算面积的函数成员; ②以点为基类派生一个圆类,增加表示半径的数据成员,重载显示和计算面积的函数; ③定义一个线段类,以两个点类对象作数据成员,定义显示、求面积及长度函数,线段类采用聚合方式,因为有两个端点,不能用派生。 编程测试所定义的类体系。 本实验教程中有源码,请自行运行,体会和熟悉继承与派生的基本概念及实现方法,掌握派生类构造函数初始化基类成员和对象成员的方法等。2. 实践教程P83编程:多层派生练习,由上题Point类和Circle类继续派生出Cylinder类。要求计算圆柱的底面积、侧面积、全面积和体积。 请编写所有完整的成员函数,并编写主函数进行验证。 数据处理 1. (1) (2)j结果报错,原因是派生类中的成员函数不能访问基类中的私有成员。(3)在Line类中添加两个数据成员。 2. #include 第八章继承与多态习题 一.基本概念与基础知识自测题 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练习题带答案集团标准化工作小组 #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 关键字只对紧随其后的基类名起作用。 实验三派生类与继承 一、实验目的 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< 第九章继承与派生类 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.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 内蒙古科技大学 面向对象的程序设计 实验报告 一、实验目的 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) {第3章 继承和派生习题
继承和派生实验报告
C 第八章继承与派生习题习题解答
c练习题带答案
继承与多态习题
c++实验3 派生类与继承1
C++继承与派生类习题
实验3 继承和派生类的应用
内蒙古科技大学面向对象的程序设计实验8 继承(一)