搜档网
当前位置:搜档网 › 实验八 继承与派生

实验八 继承与派生

实验八 继承与派生

实验八继承与派生

一、实验目的

1.学习定义和使用类的继承关系、定义派生类;

2.熟悉不同继承方式下对基类成员的访问控制;

二、实验内容:

1、定义一个基类Shape,再次基础上派生出Rectangle和Circle,两者都有getArea()函数计算对象的面积。使用Rectangle类创建一个派生类Square。

思考题:(实现加实验分)

1.定义类X、Y、Z,函数h(X *),满足:类X有私有成员i,Y的成员函数g(X *)

是X的友元函数,实现对X的成员i加1,类Z是类X的友元类,其成员函数f(X *)实现对X的成员i加5,函数h(X *)是X的友元函数,实现对X的成员i加10。在一个文件中声明类,在一个文件中实现类,在另一个文件中测试类。

具体要求如下:

任务1:从people(人员)类派生出student(学生)类,添加属性:学校、学院、专业、班号、入学成绩,设计相应的成员函数(构造函数,拷贝构造函数,录入函数,显示函数)。

任务2:从people类派生出teacher(教师)类,添加属性:职务,部门,职称。并设计相应的成员函数。

任务3:从student类派生出graduate(研究生)类,添加属性:导师,研究方向。并设计相应的成员函数。

任务4:编写程序来测试这个类。

第3章 继承和派生习题

《面向对象程序设计》习题 班级:学号:姓名:名单序号:成绩: 第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 #include using namespace std; #define PI 3.14159 class Point{ friend class Line; protected: double x, y ; public: Point(){x = 0 ; y = 0 ; } Point(double xv,double yv){ x = xv; y = yv; } double Area(){return 0;} void Show() { cout<<"x="<

int main(void) // 主函数main(void) { C obj; // 定义对象 system("PAUSE"); // 调用库函数system( ),输出系统提示信息return 0; // 返回值0, 返回操作系统 } 2.先阅读下列程序,写出执行结果。然后输入程序,调试程序,比较结果的正确性。// 文件名: main.cpp #include // 预处理命令 using namespace std; // 使用标准命名空间std class A { protected: // 数据成员: int a; // 数据成员 public: // 公有函数: A(int x): a(x){ } // 构造函数 void Show() const{ cout << a << endl; } // 显示a之值 }; class B { protected: // 数据成员: int b; // 数据成员 public: // 公有函数: B(int x): b(x){ } // 构造函数 void Show() const{ cout << b << endl; } // 显示a与b之值 }; class C: public A, public B { public: // 公有函数: C(int x, int y): A(x), B(y){ } // 构造函数 void Show() const // 显示b之值 { cout << a << "," << b << endl; } }; int main(void) // 主函数main(void) { C obj(5, 18); // 定义对象 obj.Show(); // 显示相关信息 obj.A::Show(); // 显示相关信息 obj.B::Show(); // 显示相关信息 system("PAUSE"); // 调用库函数system( ),输出系统提示信息return 0; // 返回值0, 返回操作系统 }

c++实验报告

面向对象程序设计 (C++) 实 验 报 告 指导老师:柯栋梁 学生:吴健 班级:软131 学号:139074164

目录 实验一、VC6.0环境入门与简单程序设计实验报告 (3) 实验二、函数的应用实验报告 (7) 实验三、类与对象实验报告 (14) 实验四、C++程序结构实验报告 (22) 实验五、数组、指针与字符串实验报告 (26) 实验六、继承和派生实验报告 (33) 实验七、多态性实验报告 (42) 实验八、面向对象综合实验实验报告 (48)

实验一、VC6.0环境入门与简单程序设计实验报告 系软件工程班级 131 学号 139074164 姓名吴健 同组者指导教师柯栋梁 一、实验目的: 1、熟悉VC++6.0开了环境并编写简单的C++程序。 3、使用C++语言编写简单的输入输出程序。 4、使用VC++6.0的DEBUG调试功能:单步执行、设置断点、观察变量值。 二、实验内容: 1、使用VC++建立一个标准C++程序,编译、运行如下程序: #include Int main() { Cout<<”Hello World!\n”; Cout<<”Welcome to C++!\n”; } 2、编程计算图形的面积。程序可计算圆形、长方形、正方形等的面积,运行时首先提示用户选择图形类型,然后根据不同图形类型,输入相关参数计算其面积,并将其显示出来。 3、使用DEBUG功能观察任务2程序运行中变量值的变化情况。 三、实验要求: 1、任务1要求熟悉VC++开发环境,并能够使用其建立第一个C++程序。 2、实验前要做好充分准备,包括程序清单、调试步骤、调试方法,以及对程序结果的分析等。 四、实验报告: 1.程序运行截图

实验四 继承与派生讲解学习

实验四继承与派生

实验四派生类与继承 【实验类型】验证性实验【实验课时】2学时 【实验目的】 (1)理解类的继承的概念,能够定义和使用类的继承关系。 (2)掌握派生类的声明与定义方法。 (3)熟悉公有派生和私有派生的访问特性。 (4)学习虚基类在解决二义性问题中的作用。 【实验环境】 硬件:计算机 软件:Microsoft Visual C++ 6.0 【实验内容】 1、按要求阅读、编写、调试和运行以下程序。 (1)实验内容 ①定义一个基类MyArray,基类中可以存放一组整数。 class MyArray {public: MyArray(int leng); ~MyArray(); void Input(); void Display(); protected: long int *alist; // 指向动态申请的一组空间 int length;}; // 整数的个数 基类中有构造函数、析构函数、输入数据和输出数据的函数。 ②定义一个类SortArray继承自MyArray ,在该类中定义函数实现排序功能。

③定义一个类ReArray继承自MyArray ,在该类中定义函数实现逆转功能。 ④定义一个类AverArray继承自MyArray ,在该类中定义函数Aver求解整数的平均值。 ⑤定义NewArray类,同时继承了SortArray, ReArray和AverArray,使得NewArray类的对象同时具有排序、逆转、和求平均值的功能。在继承的过程中声明为虚基类,体会虚基类在解决二义性问题中的作用。 (2)实验程序 (参考) 程序如下: #include "iostream.h" #include "process.h" class MyArray {public: MyArray(int leng); ~MyArray(); void Input(); void Display(); protected: long int *alist; // 指向动态申请的一组空间 int length; // 整数的个数 }; MyArray::MyArray(int leng) { length=leng; alist=new long int[length]; if(alist==NULL) { cout<<"对不起,创建失败。请重试。 ";exit(1); } } MyArray::~MyArray() {

派生与继承实验1

实验二继承与派生——教师工资计算(一) 一、实验目的 1.理解继承的含义; 2.学习从现有类派生出新类的方式; 3.了解在派生类中如何使用基类的成员。 二、实验内容与要求 1.新建一个雇员类,它的数据成员有雇员代号,年龄,工资,性别,姓名,输入雇员资料方法,打印雇员资料方法。 2.以此雇员类为基类,从中派生出教师类,其中要求在教师类中加入一个计算教师工资的方法,教师工资=基本工资(1000)+课时(月工作量)×30。 3.以此雇员类为基类,从中派生出实验员类,其中要求在实验员类中加入一个计算实验员工资的方法,实验员工资=基本工资(800)+实验室补助(150)+值班时间(月工作量)×5。 4. 以此雇员类为基类,从中派生出行政人员类,其中要求在行政人员类中加入一个计算行政人员工资的方法,行政人员工资=基本工资(900)+行政补贴(200)。 三、实验任务分解 四、实验步骤 1. 建立工程 (1) 新建一个win32 Console Application的工程: 打开VC++开发软件,从[文件]菜单中点击[新建]菜单项,出现如图所示: 在右上角的工程下输入该工程的名称,如 c10,并设置该工程所保存的路径。 最后点击确定。

(2) 当确定后会出现要你选择工程类型的对话框,如图所示:请选择一个空的工程,即 第一个选项。 (3) 当单击确定后,工程建立完毕,接下来建立程序源文件,请再单击[文件]菜单下的[新 建]出现原先出现的对话框,请选择“文件”选项卡中的c++ source file选项,并取名,如c10 (4)当确定后,就进入了源代码的编辑窗口,如图所示:

继承与派生练习题

继承与派生练习题

习题八 第八章继承与派生 1.下列对派生类的描述中,(D.派生类中继承的基类成员的访问权限到派生类保持不变 )是错误的。 A.一个派生类可以作为另一个派生类的基类 B.派生类至少有一个基类 C.派生类的成员除了它自己的成员外,还包含了它的基类成员 D.派生类中继承的基类成员的访问权限到派生类保持不变 2. 派生类的对象对它的哪一类基类成员是可以访问的?(A.公有继承的基类的公有成员) A.公有继承的基类的公有成员 B. 公有继承的基类的保护成员 C. 公有继承的基类的私有成员 D. 保护继承的基类的公有成员 3. 关于多继承二义性的描述,(D.派生类和它的基类中出现同名函数时,将可能出现二义性 )是错误的。

A.派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性B.一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性 C.解决二义性最常用的方法是作用域运算符对成员进行限定 D.派生类和它的基类中出现同名函数时,将可能出现二义性 4. 多继承派生类构造函数构造对象时,(B.虚基类的构造函数)被最先调用。 A.派生类自己的构造函数B.虚基类的构造函数 C.非虚基类的构造函数 D.派生类中子对象类的构造函数 5. C++类体系中,能被派生类继承的是( B.虚函数)。 A.构造函数 B.虚函数 C.析构函数 D.友元函数 6. 设有基类定义: class Cbase { private: int a; protected: int b; public: int c; }; 派生类采用何种继承方式可以使成员变量b成为自己的私有成员(A. 私有继承) A. 私有继承 B.保护继承

816306411_5_实验七 继承与派生

实验七继承与派生 【实验目的】 1、掌握继承的概念。 2、理解派生类与基类的关系。 3、理解不同的继承类型。 4、掌握继承下的构造函数和析构函数。 5、掌握单继承和多继承使用方法。 6、理解静态成员。 【实验内容】 1、上机分析下面程序,理解继承下构造函数和析构函数的执行顺序。 #include using namespace std; class A { public: A() { cout<<"Constructor1_A"<< x << endl; } A( int m ) : x( m ) { cout<<"Constructor2_A"<< x << endl; } ~A() { cout<<"Destructor_A"<< x << endl; } private: int x; }; class B : public A { public: B() { cout<<"Constructor1_B"<< y << endl; } B( int m, int n, int l ) : A( m ), a( n ), y( l ) { cout<<"Constructor2_B"<< y <

B b1, b2(5,6,7); return 0; } 2、在下面一段类定义中,Derived类是有直接基类Base1和Base2所公有派生的,Derived 类包含有两个间接基类Base,在初始化函数Init中,需要把x1和x2的值分别赋给属于基类Base1的x成员和属于基类Base2的x成员。 #include using namespace std; class Base{ protected: int x; public: Base(){x=0;} }; class Base1:public Base{ public: Base1(){} }; class Base2:public Base{ public: Base2(){} }; class Derived: (1) { public: Derived(){} void Init(int x1,int x2){ (2) ; (3) ; } void output(){cout< using namespace std; class Base{

实验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)

实验二 类的继承与派生

实验二类的继承与派生 班级:网络工程1班 姓名:倪冬生 学号:20112346017

一、实验目的 1. 掌握类的声明和使用。 2. 掌握类的声明和对象的声明。 3. 复习具有不同访问属性的成员的访问方式。 4. 观察构造函数和析构函数的执行过程。 5. 学习声明和使用类的继承关系,声明派生类; 6. 熟悉不同继承方式下对基类成员的访问控制; 二.实验内容 1. 设计一个用于人事管理的People(人员)类。考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、 id(身份证号)等等。具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号charid[16]。其中“出生日期”声明为一个“日期”类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、组合。在测试程序中声明people 类的对象数组,录入数据并显示。 2. 从people(人员)类派生出student(学生)类,添加属性:班号char classNO[7];从people 类派生出teacher(教师)类,添加属性:职务char pship[11]、部门char departt[21]。从student 类中派生出graduate(研究生)类,添加属性:专业char subject[21]、导师teacher adviser;从graduate 类和teacher 类派生出TA(助教博士生)类,重载相应的成员函数,测试这些类。 三 . 实验步骤 1.程序代码 #include #include using namespace std; class Date //日期类 { private: int year; int month; int day; public: Date(){} //默认构造 Date(int y,int m,int d) //带参构造 { year=y; month=m; day=d; }

第三次上机实验:继承与派生类上机实践指导

继承与派生类上机实践指导 一.实验目的 1.理解继承的含义,掌握派生类的定义方法和实现; 2.理解公有继承下基类成员对派生类成员和派生类对象的可见性,能正确地访问继承层次中的各种类成员; 3.理解保护成员在继承中的作用,能够在适当的时候选择使用保护成员以便派生类成员可以访问基类的部分非公开的成员; 二.实验内容 1. (1) 将例5.3的程序修改、补充,写成一个完整、正确的程序,用保护继承方式。在程序中应包括输入数据的函数。(2) 修改例5.3的程序,改为用公用继承方式。上机调试程序,使之能正确运行并得到正确的结果。对这两种继承方式作比较分析,考虑在什么情况下二者不能互相代替。 2. 调试运行Ex1 2.1需求分析: 某小型公司的人员管理信息系统。 三类人员:经理(manager)、技术人员(technician)、销售人员(salesman);后期又增加一类人员:销售经理(sales_manager)。 要求存储这些人员的姓名、编号、级别、当月工资、计算月薪总额并显示全部信息。 (1)人员编号:基数为1000,每增加一名人员时,人员编号加1; (2)人员级别:所有人员初始级别为1,然后进行升级。升级规则:经理为4级、技术人员为3级、销售人员为1级、销售经理为3级; (3)月薪计算:经理=固定月薪8000元;技术人员=100元/小时; 销售人员=当月个人销售额*4%;销售经理=固定月薪5000+所辖部门当月销售额*5%。 2.2数据结构: struct employee { char *name; /* 人员姓名*/ int indiveidualEmpNo; /* 人员编号*/ int grade; /* 人员级别*/

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++)

实验7 继承与派生

电子信息学院实验报告书 课程名:面向对象程序设计题目:实验7 继承与派生实验类别设计 班级:BX1004 学号:35 姓名:赵鑫

一.实验目的 1.理解继承的含义,掌握派生类的定义方法和实现; 2.理解公有继承下基类成员对派生类成员和派生类对象的可见性,能正确地访问继承层次中的各种类成员; 3.理解保护成员在继承中的作用,能够在适当的时候选择使用保护成员以便派生类成员可以访问基类的部分非公开的成员; 4.理解虚函数在类的继承层次中的作用,虚函数的引入对程序运行时的影响,能够对使 用虚函数的简单程序写出程序结果。 二.实验内容 1.将例5.2的程序片段补充和改写成一个完整、正确的程序,用私有继承方式。在程序 中应包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序应输出以上5个数据的值。 2.编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班级和成绩,教 师数据有编号、姓名、职称和部门。要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类student和教师类数据操作类teacher的基类。 3. 编写一个程序计算出球、圆柱和圆锥的表面积和体积。 要求: (1)定义一个基类圆,至少含有一个数据成员半径; (2)定义基类的派生类球、圆柱、圆锥,都含有求表面积和体积的成员函数和输出函数。(3)定义主函数,求球、圆柱、圆锥的和体积(初始化用构造函数)。 3.实验结果 ⑴ #include using namespace std; class Student {public: void get_value() {cin>>num>>name>>sex;} void display() {cout<<"学号:"<>age>>addr;} void display_1() {

继承与派生

第7章——继承与派生 一、选择题 1.在c++中,类之间的继承关系具有( )。 (a) 自反性 (b) 对称性 (c) 传递性 (d) 反对称性 2.下列关于类的继承描述中,( )是正确的。 (a) 派生类公有继承基类时,可以访问基类的所有数据成员,调用所有成员函数。 (b) 派生类也是基类,所以它们是等价的。 (c) 派生类对象不会建立基类的私有数据成员,所以不能访问基类的私有数据成员。 (d) 一个基类可以有多个派生类,一个派生类可以有多个基类。 3.当一个派生类公有继承一个基类时,基类中的所有公有成员成为派生类的( )。 (a) public成员(b) private成员(c) protected成员(d) 友员 4.当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成员成为派生类的( )。 (a) public成员(b) private成员(c) protected成员(d) 友员 5.当一个派生类保护继承一个基类时,基类中的所有公有成员和保护成员成为派生类的( )。 (a) public成员(b) private成员(c) protected成员(d)友员 6.不论派生类以何种方式继承基类,都不能直接使用基类的()。 (a) public 成员(b) private成员 (c) protected成员(d) 所有成员 7.下面描述中,错误的是( )。 (a) 在基类定义的public成员在公有继承的派生类中可见,也能在类外被访问。 (b) 在基类定义的protected成员在私有继承的派生类中可见。 (c) 在基类定义的公有静态成员在私有继承的派生类中可见。 (d) 访问声明可以在公有继承派生类中把基类的public成员声明为private成员。 8.在c++中,可以被派生类继承的函数是( = )。 (a) 成员函数(b)构造函数(c) 析构函数(d)友员函数 9.在创建派生类对象时,构造函数的执行顺序是( = )。 (a) 对象成员构造函数—基类构造函数—派生类本身的构造函数 (b) 派生类本身的构造函数—基类构造函数—对象成员构造函数 (c) 基类构造函数—派生类本身的构造函数—对象成员构造函数 (d) 基类构造函数—对象成员构造函数—派生类本身的构造函数 10.当不同的类具有相同的间接基类时,( c )。 (a) 各派生类无法按继承路线产生自己的基类版本 (b) 为了建立惟一的间接基类版本,应该声明间接基类为虚基类 (c) 为了建立惟一的间接基类版本,应该声明派生类虚继承基类 (d) 一旦声明虚继承,基类的性质就改变了,不能再定义新的派生类 二、阅读下列程序,写出执行结果 1. #include using namespace std; class Base { public : void get( int i,int j,int k,int l ) { a = i; b = j; x = k; y = l;

继承与派生(二)实验报告

学号:姓名:班级: 实验四继承与派生(二) 【实验目的】 1、理解多重继承的概念; 2、理解为了避免同同一基类出现多个重复的副本而采用的虚基类概念和虚拟继承; 3、学习利用虚基类解决二义性问题。 【实验内容】 题目: 2、设计一个用于人事管理的“people(人员)”基类。考虑到通用 性,仅只抽象出所有类型人员都有的属性:编号、姓名、性别、出生日期、身份证号等;从people(人员)类派生出student(学生)类,并添加属性:班号classNO;从people类派生出teacher(教师)类,并添加属性:职务principalship、部门Department;从student类派生出graduate (研究生)类,并添加属性:专业subject、导师teacher adviser(teacher 类);从graduate类和teacher类派生出TA(助教生)类。设计时注意虚基类的使用,注意重载相应的成员函数。测试这些类。

UML图: Date -year: int -month: int -day: int <>-Date(y: int, m: int, d: int) <>-Date(D: Date) +init(y: int, m: int, d: int): void +show(): void people #m_date: Date #m_no: long #m_ident_no: string #m_name: string #m_sex: string <>-people(no: long, name: string, sex: string, ident_no: string, year: int, month: int, day: int) <>-people(no: long, name: string, sex: string, ident_no: string, date: Date) <>-people(p: people) +init(no: long, name: string, sex: string, ident_no: string, year: int, month: int, day: int): void +init(no: long, name: string, sex: string, ident_no: string, date: Date): void +init(p: people): void +show(): void student #m_classno: string <>-student(person: people, classno: string) <>-student(stu: student) +show(): void teacher #m_principalship: string #m_department: string <>-teacher(p: people, principalship: string, department: string) <>-teacher(stu: teacher) +show(): void graduate #m_subject: string #m_adviser: teacher <>-graduate(s: student, subject: string, t: teacher) <>-graduate(g: graduate) +show(): void TA <>-TA(g: graduate, t: teacher) <>-TA(t: TA) +show(): void

相关主题