西安财经学院信息学院
《面向对象方法及程序设计》 实验报告
实验名称 继承与派生 实验室 519 实验日期 12.23
继承与派生
一、实验目的与要求
1. 进一步巩固C++语言中类和对象的概念和应用。
2. 掌握继承和派生的概念和实现。
3. 进一步熟练掌握类和对象的概念,使用的方法,访问的规则。
4. 掌握单继承的概念和应用。
5. 掌握多继承和虚基类的概念,并熟练应用。
二、实验内容
1.根据如图所示编辑程序,计算教师的课时,计算学生的平均成绩,假定每个学生3门课程,并输出每个类的信息(例如教师的职称,学生的专业等,程序实现要求使用到虚基类的知识)。
2. 编写一个程序实现员工的工资管理。该公司主要有4类人员,经理(manager ),销售经理(salesmanager),技术人员(technician),销售员(salesman)。这些人员都是职员(employee ),有编号,姓名,月工资,工龄等信息。月工资的计算方法为:经理固定月薪8000元,技术人员每小时工资100元,销售人员底薪为1000,然后加上每月的销售额的4%,销售经理底薪5000,然后加上本部门当月销售总额的千分之五。要求编写程序计算该公司职员的月工资并输出到屏幕上。(假定该公司1个经理,1个销售经理,3个技术人员,3个销售人员)
三、实验环境 硬件环境:PC 一台
姓名 学号 班级 年级 指导教师 李翠
软件环境:WIN7操作系统、Microsoft visual c++ 2010 四、实验步骤
五、实验结果
六、小结
通过本次实验,使我对继承与派生有了更深入的了解。包括,虚基类以及虚基类与派生类的构造函数与析构函数的调用等等。
七、源程序清单
内容1:
#include"iostream"
using namespace std;
class person{
};
class teacher:virtual public person{
public:
int b;
};
class teacher1:virtual public teacher{
public:
teacher1(int B)
{
b=B;
cout<<"教授"< cout<<"课时:"< }; class teacher2:virtual public teacher{ public: teacher2(int D) { b=D; cout<<"讲师"< cout<<"课时:"< }; class teacher3:virtual public teacher{ public: teacher3(int F) { b=F; cout<<"研究生助教"< cout<<"课时:"< }; class student:public person{ public: float a1,a2,a3; }; class student1:public student{ public: student1(float b1,float b2,float b3){ a1=b1; a2=b2; a3=b3; cout<<"英语:"< cout<<"数据库:"< cout<<"java:"< }; class student2:public student{ public: student2(float b1,float b2,float b3){ a1=b1; a2=b2; a3=b3; cout<<"本科生:"< cout<<"英语:"< cout<<"组成原理:"< cout<<"c++:"< }; class student3:public student{ public: student3(float b1,float b2,float b3){ a1=b1; a2=b2; a3=b3; cout<<"专科生:"< cout<<"英语:"< cout<<"c语言:"< cout<<"数字电路:"< }; class zhuyan:public teacher3,public student1{ public: zhuyan(int x,float a,float b,float c):teacher3(x),student1(a,b,c) {} }; int main() { teacher1 q(50); teacher2 w(70); student2 e(75,82,100); student3 r(78,79,87); zhuyan t(80,70,78,81); system("pause"); return 0; } 内容2: #include using namespace std; class employee {public: employee() {cout<<"编号:";cin>>number; cout<<"姓名:";cin>>name; salary=0;} protected: char number[5]; char name[10]; double salary; }; class manager:public employee {public: manager(){monthlypay=8000;salary=monthlypay;} void print() {cout<<"经理:"< int monthlypay; }; class technician:public employee {public: technician(){weekpay=100;} void pay() {cout< cin>>workhour; salary=workhour*100;} void print() {cout<<"技术人员:"< int weekpay; int workhour; }; class salesman:public employee {public: salesman(){basicsalary=1000; commrate=0.04;} void pay() {cout< cin>>sales; salary=basicsalary+sales* commrate;} void print() {cout<<"销售员:"< int basicsalary; double commrate; double sales; }; class salesmanager:public salesman {public: salesmanager(){monthlypay=5000; commrate=0.005;} void pay() {cout< cin>>sales; salary=monthlypay+sales* commrate;} void print() {cout<<"销售经理:"< double monthlypay; }; int main() {manager obj1; obj1.print(); technician obj2,obj3,obj4; obj2.pay(); obj2.print(); obj3.pay(); obj3.print(); obj4.pay(); obj4.print(); salesman obj5,obj6,obj7; obj5.pay(); obj5.print(); obj6.pay(); obj6.print(); obj7.pay(); obj7.print(); salesmanager obj8; obj8.pay(); obj8.print();system("pause"); } 实验目的与要求: 1.掌握类的继承与派生关系以及实验方法,理解类的层次结构。 2.掌握派生类构造函数初始化基类成员和对象成员的方法。 3.掌握内联函数和默认函数。 4.掌握赋值兼容原则,掌握派生类的复制构造函数和赋值运算符的定义。 实验过程及内容: 1.实践教程实验二十二P81范例:定义一个继承与派生关系的类体系,在 派生类中访问基类成员。 ①先定义一个点类,包含x,y坐标数据成员,显示函数和计算面积的函数成员; ②以点为基类派生一个圆类,增加表示半径的数据成员,重载显示和计算面积的函数; ③定义一个线段类,以两个点类对象作数据成员,定义显示、求面积及长度函数,线段类采用聚合方式,因为有两个端点,不能用派生。 编程测试所定义的类体系。 本实验教程中有源码,请自行运行,体会和熟悉继承与派生的基本概念及实现方法,掌握派生类构造函数初始化基类成员和对象成员的方法等。2. 实践教程P83编程:多层派生练习,由上题Point类和Circle类继续派生出Cylinder类。要求计算圆柱的底面积、侧面积、全面积和体积。 请编写所有完整的成员函数,并编写主函数进行验证。 数据处理 1. (1) (2)j结果报错,原因是派生类中的成员函数不能访问基类中的私有成员。(3)在Line类中添加两个数据成员。 2. #include 注意派生类的构造函数中对基类数据成员的初始化方法(即 Circle(double xv,double yv,double vv):Point(xv,yv)), 以及构造函数中对对象成员的初始化方法(即 Line(double xv1,double yv1,double xv2,double yv2) : start(xv1,yv1),end(xv2,yv2){ } ) 【要求】 (1)建立工程,录入上述程序,改变数据实验之。 (2)修改Point 类的数据成员x ,y 的访问权限为private ,再运行,结果如何? (3)如果不将Line 类设为 Point 类的友元,应采取什么措施?为哪个类增加数据或函数成员? 2.编程:多层派生练习,由上题Point 类和Circle 类继续派生出Cylinder 类。要求计算圆柱体的底面积、侧面积、全面积和体积。 实验4 继承与派生---参考程序 二、实验内容 1.定义一个基类有姓名、性别、年龄,再由基类派生出教师类和学生类,教师类增加工号、职称和工资,学生类增加学号、班级、专业和入学成绩。 #include 实验2 派生类与继承 实验课程名:面向对象程序设计(C++) 专业班级:学号:姓名: 实验时间:实验地点:指导教师: 2.1实验目的和要求 (1) 掌握派生类的声明方法和派生类构造函数的定义方法。 (2) 掌握不同继承方式下,基类成员在派生类中的访问属性。 (3) 掌握在继承方式下,构造函数与析构函数的执行顺序与构造规则。 (4) 学习虚基类在解决二义性问题中的作用。 二、实验内容 一、构造一个类Geometry 及其派生类,该类主要实现关于几何图形的基本操作。对于基类“几何图形”,有求面积、求体积的函数(纯虚函数),其派生类圆和矩形主要有初始化(构造函数),求面积,求周长操作,类圆的派生类圆球和圆柱有求表面积、体积操作。 试在主函数中分别定义圆、圆球、圆柱以及矩形的对象,并调用其成员函数实现其相应操作。 实验代码如下: #include ~Geometry(){} double GetArea(){}//求面积函数double GetPerimeter(){}//求体积函数double Getcolume(){}//求周长函数 virtual show(){} }; class Circle:public Geometry { public: Circle(double i) { radiums=i; } ~Circle(){} double GetArea(); double Getcolume(); double R() { return radiums; } show(); private: 实验四继承与派生 实验四派生类与继承 【实验类型】验证性实验【实验课时】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() {继承和派生实验报告
实验4 继承与派生-程序
c++派生类与继承实验报告材料
实验四 继承与派生讲解学习
实验6-继承与派生(1)