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

合集下载

c 继承与派生实验报告

c 继承与派生实验报告

c 继承与派生实验报告
C 继承与派生实验报告
实验目的:通过实验,掌握C语言中继承与派生的概念和使用方法,加深对面向对象编程的理解。

实验内容:在C语言中,继承与派生是面向对象编程中非常重要的概念。

在本次实验中,我们将通过一个简单的例子来演示C语言中的继承与派生的用法。

首先,我们定义一个基类(父类)Person,包括姓名和年龄两个成员变量,以及一个显示信息的成员函数。

然后,我们定义一个派生类(子类)Student,继承自Person类,新增一个成员变量学号,并重写显示信息的成员函数。

在实验中,我们首先创建一个Person对象,设置姓名和年龄,然后调用显示信息函数,观察结果。

接着,我们创建一个Student对象,设置姓名、年龄和学号,再次调用显示信息函数,观察结果。

实验结果:通过实验,我们成功实现了C语言中的继承与派生。

我们发现,通过继承,子类Student可以直接使用父类Person中的成员变量和成员函数,同时可以新增自己的成员变量和函数。

这样的设计使得代码更加简洁和灵活,提高了代码的复用性和可维护性。

结论:C语言中的继承与派生是面向对象编程中非常重要的概念,通过本次实验,我们深入理解了这一概念的用法和意义。

掌握了继承与派生的方法后,我们可以更加灵活地设计和编写程序,提高代码的质量和效率。

总结:通过本次实验,我们对C语言中的继承与派生有了更深入的理解,加深了对面向对象编程的认识。

在今后的学习和工作中,我们将更加灵活地运用继承与派生的方法,提高代码的质量和效率。

继承与派生实验报告

继承与派生实验报告

西安财经学院信息学院《面向对象方法及程序设计》 实验报告实验名称 继承与派生 实验室 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<<"教授"<<endl;cout<<"课时:"<<b<<endl;}};class teacher2:virtual public teacher{public:teacher2(int D){b=D;cout<<"讲师"<<endl;cout<<"课时:"<<b<<endl;}};class teacher3:virtual public teacher{public:teacher3(int F){b=F;cout<<"研究生助教"<<endl;cout<<"课时:"<<b<<endl;}};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<<"英语:"<<a1<<endl;cout<<"数据库:"<<a2<<endl;cout<<"java:"<<a3<<endl;}};class student2:public student{public:student2(float b1,float b2,float b3){a1=b1;a2=b2;a3=b3;cout<<"本科生:"<<endl;cout<<"英语:"<<a1<<endl;cout<<"组成原理:"<<a2<<endl;cout<<"c++:"<<a3<<endl;}};class student3:public student{public:student3(float b1,float b2,float b3){a1=b1;a2=b2;a3=b3;cout<<"专科生:"<<endl;cout<<"英语:"<<a1<<endl;cout<<"c语言:"<<a2<<endl;cout<<"数字电路:"<<a3<<endl;}};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 <iostream>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<<"经理:"<<name<<"编号:"<<number<<"本月工资:"<<salary<<endl;} protected:int monthlypay;};class technician:public employee{public:technician(){weekpay=100;}void pay(){cout<<name<<"工作时间:";cin>>workhour;salary=workhour*100;}void print(){cout<<"技术人员:"<<name<<"编号:"<<number<<"本月工资:"<<salary<<endl;} protected:int weekpay;int workhour;};class salesman:public employee{public:salesman(){basicsalary=1000;commrate=0.04;}void pay(){cout<<name<<"本月销售额:";cin>>sales;salary=basicsalary+sales* commrate;}void print(){cout<<"销售员:"<<name<<"编号:"<<number<<"本月工资:"<<salary<<endl;} protected:int basicsalary;double commrate;double sales;};class salesmanager:public salesman{public:salesmanager(){monthlypay=5000;commrate=0.005;}void pay(){cout<<name<<"本月部门销售额:";cin>>sales;salary=monthlypay+sales* commrate;}void print(){cout<<"销售经理:"<<name<<"编号:"<<number<<"本月工资:"<<salary<<endl;} private: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.实验目的(1)熟练掌握类的继承,能够定义和使用类的继承关系。

(2)掌握派生类的声明和实现方法。

(3)掌握类构造函数的初始化列表与作用域分辨符的使用方法。

(4)理解虚基类在解决二义性问题中的作用。

2.实验内容(1)定义Staff(员工)类,有Staff分别派生出Saleman(销售员)类和Manager (经理)类,再由Saleman(销售员)类和Manager(经理)类采用多重继承方式派生出新类SaleManager(销售经理)类。

要求:a.在Staff类中包含的数据成员有编号(num)、姓名(name)、出勤率(rateOfAttend)、基本工资(basicSal)和奖金(prize)。

在Saleman类中还包含数据成员:销售员提成比例(deductRate)和个人销售额(personAmount),在Manager类中还包含数据成员:经理提成比例(totalDeductRate)和总销售额(totalAmount)。

在SaleManager类中不包含其他数据成员。

b.各类人员的实发工资公式如下:员工实发工资=基本工资+奖金+出勤率销售员实发工资=基本工资+奖金+出勤率+个人销售额*销售员提成比例经理实发工资=基本工资+奖金+出勤率+总销售额*经理提成比例销售经理实发工资=基本工资+奖金+出勤率+个人销售额*销售员提成比例+总销售额*经理提成比例c.每个类都有构造函数、输出基本信息函数(Output)和输出实发工资函数(OutputW age)。

3.实验步骤(1)实验源程序//程序功能:熟悉类的继承与派生的基本应用#include<iostream>using namespace std;class Staff //定义员工类{protected:char name[20];float rateOfAttend;int num;int basicSal;int prize;int salary;public:Staff(int nu, char na[], float rate, int bac, int pe){num = nu;strcpy(name, na);rateOfAttend = rate;basicSal = bac;prize = pe;}void Output() const{cout << "员工的基本信息:\n";cout << "编号姓名出勤率基本工资奖金\n";cout << num << " "<< name << " "<< rateOfAttend << " "<< basicSal << " "<< prize << endl;}int OutputW age(float rate, int bac, int pe){salary = bac + pe * rate;return (salary);}};class Saleman:virtual public Staff //继承得到销售员类Saleman{protected:float deductRate;int personAmount;int lsalary;public:Saleman(int nu, char na[], float rate, int bac, int pe, int ded, int person):Staff(nu, na, rate, bac, pe){deductRate = ded;personAmount = person;}void Output() const{Staff::Output();cout << "提成比例:" << deductRate << endl;cout << "个人销售额:" << personAmount << endl;}int OutputW age(float rate, int bac, int pe, float ded, int person){lsalary = Staff:: OutputW age( rate, bac, pe) + ded * person;return (lsalary);}};class Manager:virtual public Staff //继承得到经理类Manager {protected:float totalDeductRate;int totalAmount;int rsalary;public:Manager(int nu, char na[], float rate, int bac, int pe, float totalr, int totala):Staff(nu, na, rate, bac, pe){totalDeductRate = totalr;totalAmount = totala;}void Output() const{Staff::Output();cout << "提成比例:" << totalDeductRate << endl;cout << "总销售额:" << totalAmount << endl;}int OutputW age(float rate, int bac, int pe, float totalr, int totala){rsalary = Staff:: OutputW age( rate, bac, pe) + totalr * totala;return(rsalary );}};class SaleManager:virtual public Saleman,virtual public Manager //有多重继承得到销售经理类{protected:int lrsalary;public:SaleManager(int nu, char na[], float rate, int bac, int pe, float ded, int person, float totalr, int totala):Staff(nu, na, rate, bac, pe),Saleman(nu, na, rate, bac, pe, ded, person),Manager(nu, na, rate, bac, pe, totalr, totala){}void Output() const{Staff::Output();cout << "提成比例:" << deductRate << endl;cout << "个人销售额:" << personAmount << endl;cout << "提成比例:" << totalDeductRate << endl;cout << "总销售额:" << totalAmount << endl;}int OutputW age(float rate, int bac, int pe, float ded, int person, float totalr, int totala){lrsalary = Staff:: OutputWage( rate, bac, pe) + ded * person + totalr * totala;return( lrsalary);}};void main(){Saleman objsale(101101, "LD", 0.88f, 1200, 800, 0.05f, 10000);Manager objmana(101102, "NXG", 0.90f, 2500, 1000, 0.10f, 20000);SaleManager objsalemana(101103, "HDY", 0.99f, 3500, 2000, 0.20f, 100000, 0.20f,150000);objsale.Output();cout << "销售员的实发工资:" << " ";cout << objsale.OutputWage(0.88f, 1200, 800, 0.05f, 10000) << endl;cout << endl;objmana.Output();cout << "经理的实发工资:" << " ";cout << objmana.OutputW age(0.90f, 2500, 1000, 0.10f, 20000) << endl;cout << endl;objsalemana.Output();cout << "销售经理的实发工资:" << " ";cout<<objsalemana.OutputW age(0.99f, 3500, 2000, 0.20f, 10000, 0.20f, 150000) << endl;cout << endl;}(2)编译并运行该程序。

C++第三次上机

C++第三次上机

《面向对象程序设计》上机报告题目:继承与派生类上机实践指导班级:学号:姓名:吕琳涛上机时间:12月13日上午一节二节一、题目要求某小型公司的人员管理信息系统。

三类人员:经理(manager)、技术人员(technician)、销售人员(salesman);后期又增加一类人员:销售经理(sales_manager)。

要求存储这些人员的姓名、编号、当月工资、计算月薪总额并显示全部信息。

(1)人员编号:基数为1000,每增加一名人员时,人员编号加1;(2)月薪计算:经理=固定月薪8000元;技术人员=100元/小时;销售人员=当月个人销售额*4%;销售经理=固定月薪5000+所辖部门当月销售额*5%。

二、题目分析这种数据结构与过程分离有很多问题,例如增加一类人员---销售经理,则三个C 函数都必须重新编写。

CEmployee类char *name;int m_nIndividualEmpNo; int m_nGrade;float m_fAccumPay;static int m_nemployeeNo; CEmployee();~CEmployee();void Pay();void Promote(int);void DisplayStatus();CTechnician类float m_fHourlyRate;int m_nWorkHours;CTechnician();void Pay();void DisplayStatus();CSalesman类float m_fCommRate;float m_nSales;CSalesman();void Pay();void DisplayStatus();CManager类float m_fMonthlyPay;CManager();void Pay();void DisplayStatus();CSalesmanager类CSalesmanager();void Pay();void DisplayStatus();继承与派生类可以很好地解决两个或多个类之间的关系,很好地减少了对垒的建立,可以节省很多的时间与编写量,从而达到很好地效果。

继承和派生实验报告

继承和派生实验报告

实验目的与要求:1.掌握类的继承与派生关系以及实验方法,理解类的层次结构。

2.掌握派生类构造函数初始化基类成员和对象成员的方法。

3.掌握内联函数和默认函数。

4.掌握赋值兼容原则,掌握派生类的复制构造函数和赋值运算符的定义。

实验过程及内容:1.实践教程实验二十二P81范例:定义一个继承与派生关系的类体系,在派生类中访问基类成员。

①先定义一个点类,包含x,y坐标数据成员,显示函数和计算面积的函数成员;②以点为基类派生一个圆类,增加表示半径的数据成员,重载显示和计算面积的函数;③定义一个线段类,以两个点类对象作数据成员,定义显示、求面积及长度函数,线段类采用聚合方式,因为有两个端点,不能用派生。

编程测试所定义的类体系。

本实验教程中有源码,请自行运行,体会和熟悉继承与派生的基本概念及实现方法,掌握派生类构造函数初始化基类成员和对象成员的方法等。

2. 实践教程P83编程:多层派生练习,由上题Point类和Circle类继续派生出Cylinder类。

要求计算圆柱的底面积、侧面积、全面积和体积。

请编写所有完整的成员函数,并编写主函数进行验证。

数据处理1.(1)(2)j结果报错,原因是派生类中的成员函数不能访问基类中的私有成员。

(3)在Line类中添加两个数据成员。

2. #include <iostream>#include <cmath>using namespace std;#define PI 3.14159class 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="<<x<<' '<<"y="<<y<<endl;}};class Circle :public Point{protected:double radius;public:Circle(){ x = 0; y = 0; radius = 0; }Circle(double xv,double yv,double vv):Point(xv,yv){ //调用基类构造函数radius = vv;}Circle(Circle & cir):Point(cir){ //按赋值兼容规则cir可为Point实参radius=cir.radius;}Circle & operator=(Circle & cir){this->Point::operator=(cir); //在派生类中定义重载的拷贝赋值操作符有固定的标准格式radius=cir.radius;return *this;}double Area(){return PI*radius*radius;}void Show()cout<<"x="<<x<<' '<<"y="<<y<<" radius="<<radius<<endl; //访问基类的数据成员}};class Cylinder:public Circle {double high;public:Cylinder(){ x = 0; y = 0; radius = 0;high=0; }Cylinder(double xv,double yv,double vv,double kv):Circle(xv,yv,vv){ //调用基类构造函数high=kv;}Cylinder(Cylinder & cyl):Circle(cyl){ //按赋值兼容规则cyl可为Cylinder实参high=cyl.high;}Cylinder & operator=(Cylinder & cyl){this->Circle :: operator=(cyl); //在派生类中定义重载的拷贝赋值操作符有固定的标准格式high=cyl.high;return *this;}double ceArea(){return 2*PI*radius*high;}double quArea(){return ceArea()+2* Area();}double volume(){return Area()*high;}void Show(){cout<<"x="<<x<<' '<<"y="<<y<<' '<<"radius="<<radius<<' '<<"high="<<high<<endl; //访问基类的数据成员};class Line{Point start,end; //对象成员public:Line(){} //对象成员初始化Line(double xv1,double yv1,double xv2,double yv2) :start(xv1,yv1),end(xv2,yv2){ }double GetLength() {return sqrt((start.x-end.x)*(start.x-end.x)+(start.y-end.y)*(start.y-end.y));}double Area(){return 0;}void Show(){cout<<"start point:\n";start.Show();cout<<"end point:\n";end.Show();}};int main(){Point pt(0,0);Circle cl1(100,100,10),cl2(cl1),cl3;Cylinder h1(50,50,20,30),h2(h1),h3;Line ln1(0,0,100,100),ln2;cout<<"点面积:"<<pt.Area()<<endl;pt.Show();cout<<"cl1圆面积:"<<cl1.Area()<<endl;cl1.Show();cout<<"cl2圆面积:"<<cl2.Area()<<endl;cl2.Show();cl3=cl1;cout<<"cl3圆面积:"<<cl3.Area()<<endl;cl3.Show();cout<<"h1底面积:"<<h1.Area()<<endl;cout<<"h1侧面积:"<<h1.ceArea()<<endl;cout<<"h1全面积:"<<h1.quArea()<<endl;cout<<"h1体积:"<<h1.volume()<<endl;h1.Show();cout<<"h2底面积:"<<h2.Area()<<endl;cout<<"h2侧面积:"<<h2.ceArea()<<endl;cout<<"h2全面积:"<<h2.quArea()<<endl;cout<<"h2体积:"<<h2.volume()<<endl;h2.Show();h3=h1;cout<<"h3底面积:"<<h3.Area()<<endl;cout<<"h3侧面积:"<<h3.ceArea()<<endl;cout<<"h3全面积:"<<h3.quArea()<<endl;cout<<"h3体积:"<<h3.volume()<<endl;h3.Show();cout<<"线面积:"<<ln1. Area()<<'\t'<<"线长度:"<<ln1. GetLength()<<endl;ln1.Show();ln2.Show();return 0;}实验结论:通过这次实验,我对类的继承和派生,派生类构造函数初始化基类成员和对象成员的方法,以及赋值兼容原则有了更深的理解。

(C++)实验报告六:继承与派生

(C++)实验报告六:继承与派生

实验6 继承与派生一、实验目的1.理解继承与派生、单继承与多继承的概念;2.理解基类与派生类的定义及使用方法,派生类对象的定义与初始化方法;3.理解继承与派生过程中,把派生类作为基类构成类族的概念及虚基类的概念。

二、实验环境一台PC机,Windows XP操作系统,Visual C++ 6.0开发环境。

三、实验内容1、由在校人员类(Person)作为基类派生出学生类(Student):实验步骤:#include <iostream>#include <string>using namespace std;class Person{public:Person(int i,char *n, char s, int a){ID=i;name=n;sex=s;age=a;};int getID(){return ID;}void show(){cout<<"ID: "<<ID<<endl;cout<<"name : "<<name<<endl;cout<<"sex: "<<sex<<endl;cout<<"age: "<<age<<endl;}private:int ID;string name;char sex;int age;};class Student:public Person{public:Student(int i,char *n,char s,int a,float m,float p,float e,float c):Person(i,n,s,a){math=m;physical=p;english=e;cpp=c;total=math+physical+english+cpp;}void show(){Person::show();cout<<"math: "<<math<<endl;cout<<"physical: "<<physical<<endl;cout<<"english: "<<english<<endl;cout<<"C++: "<<cpp<<endl;cout<<"total: "<<total<<endl;}private:float math,physical,english,cpp,total;};void main(){Person p1(1,"张帅",'M',22);p1.show();cout<<endl;Student s1(9901,"林维",'S',21,65,70,75,88);s1.show();}实验结果:2、由学生类、课程类作为基类,共同派生出选课类。

实验三--类的派生与继承

实验三--类的派生与继承

课程名称:通信软件基础成绩评定:实验项目名称:实验3:类的派生与继承指导教师:学生姓名:学号:专业班级:实验项目类型:验证性实验地点:实验时间:一、实验目的与要求:1. 理解继承的含义,掌握派生类的定义方法和实现。

2.理解公有继承下基类成员对派生类成员和派生类对象的可见性,能正确的访问继承层次中的各种类成员。

3.理解保护成员在继承中的作用。

4.理解虚基类在类的继承层次中的作用。

二、实验环境:(硬件环境、软件环境)1.windows 7操作系统2.VC++编译器三、实验过程:(内容、操作步骤、结果等)1.扩展学生管理系统,编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班级和成绩等,教师数据有编号、姓名、职称和部门等。

将编号、姓名输入和显示设计成一个user类,作为学生类student和教师类teacher的基类。

代码:#include<iostream>using namespace std;class user{private:char number[20];//编号char name[20];//姓名public:user(){cout<<"请输入编号:";cin>>number;cout<<"请输入姓名:";cin>>name;}void show(){cout<<"编号:"<<number<<" 姓名:"<<name;}};class student: public user{private:char grade[20];//班级float score;//成绩public:student():user(){cout<<"请输入班级:";cin>>grade;cout<<"请输入成绩:";cin>>score;}湖南第一师范学院实验报告void show(){user::show();cout<<" 班级:"<<grade<<" 成绩:"<<score<<endl;}};class teacher:public user{private:char jobname[20];//职称char department[20];//部门public:teacher():user(){cout<<"请输入职称:";cin>>jobname;cout<<"请输入部门:";cin>>department;}void show(){user::show();cout<<" 职称:"<<jobname<<" 部门:"<<department<<endl;}};int main(){int flag,i;cout<<"请输入选项:\n"<<"0、退出\n"<<"1、学生数据输入\n"<<"2、教师数据输入"<<endl;cin>>flag;if(flag==1){ student M[2];for(i=0;i<2;i++)M[i].show();}if(flag==2){teacher N[2];for(i=0;i<2;i++)N[i].show();}if(flag==0)return 0;return 0;}2.建立基类vehicle,用来描述车辆的基本特征车轮数和承重。

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

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

继承与派生类上机实践指导一.实验目的1.理解继承的含义,掌握派生类的定义方法和实现;2.理解公有继承下基类成员对派生类成员和派生类对象的可见性,能正确地访问继承层次中的各种类成员;3.理解保护成员在继承中的作用,能够在适当的时候选择使用保护成员以便派生类成员可以访问基类的部分非公开的成员;二.实验内容1. (1) 将例5.3的程序修改、补充,写成一个完整、正确的程序,用保护继承方式。

在程序中应包括输入数据的函数。

(2) 修改例5.3的程序,改为用公用继承方式。

上机调试程序,使之能正确运行并得到正确的结果。

对这两种继承方式作比较分析,考虑在什么情况下二者不能互相代替。

2. 调试运行Ex12.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; /* 人员级别*/float accumPay; /* 月薪总额*/char employeeType; /* 人员类型(经理、技术人员、销售人员)};2.3 再考虑用三个过程分别负责升级、计算月薪和显示人员信息。

我们可以三个C 函数: Promote ()Pay ()DisplayStatus ()这种数据结构与过程分离有很多问题,例如增加一类人员---销售经理,则三个C 函数都必须重新编写。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

继承与派生类上机实践指导
一.实验目的
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; /* 人员级别*/
float accumPay; /* 月薪总额*/
char employeeType; /* 人员类型(经理、技术人员、销售人员)
};
2.3 再考虑用三个过程分别负责升级、计算月薪和显示人员信息。

我们可以三个C 函数: Promote ()
Pay ()
DisplayStatus ()
这种数据结构与过程分离有很多问题,例如增加一类人员---销售经理,则三个C 函数都必须重新编写。

三.实验要求
1. 写出程序,并调试程序,要给出测试数据和实验结果。

2. 整理上机步骤,总结经验和体会。

3. 完成实验报告和上交程序
CEmployee 类
char *name;
int m_nIndividualEmpNo;
int m_nGrade; float m_fAccumPay; static int m_nemployeeNo; CEmployee(); ~CEmployee(); void Pay(); void Promote(int); void DisplayStatus();
CTechnician 类
float m_fHourlyRate; int m_nWorkHours; CTechnician(); void Pay(); void DisplayStatus();
CSalesman 类
float m_fCommRate;
float m_nSales;
CSalesman();
void Pay();
void DisplayStatus(); CManager 类
float m_fMonthlyPay;
CManager();
void Pay();
void DisplayStatus();
CSalesmanager 类 CSalesmanager(); void Pay(); void DisplayStatus();。

相关文档
最新文档