实验三类的继承与派生
实验目的
1.掌握类及类的声明
2.掌握对象的定义和使用
3.掌握接口9的定义与实现
实验内容
1. 使用类来封装对象的属性和功能
编写一个Java程序,该程序中有3个类:Trangle、Lader和Circle,分别用来刻画“三角形”、“梯形”和“圆形”。具体要求如下:
Trangle类具有类型为double的三个边(sideA,sideB,sideC),以及周长(length)、面积(area)属性,Trangle类具有返回周长(getLength)、面积(getArea)以及修改三个边(setABC)的功能。另外还有一个boolean型的属性(boo),该属性用来判断三个数是否构成一个三角形。
Lader类具有类型为double的上底(above)、下底(bottom)、高(height)、面积(area)属性,具有返回面积(getArea)的功能。
Circle类具有类型为double的半径(radius)、周长(length)和面积(area)属性,具有返回周长(getLength)、面积(getArea)的功能。
把程序中的代码补充完整,并查看结果。
// Trangle.java
class Trangle//三角形
{
double sideA,sideB,sideC,area,length;
boolean boo;
public Trangle(double a,doubleb,double c)
{
//带参数的构造方法
setABC(a,b,c);
}
double getLength()
{
//方法体,要求计算出length的值并返回
【补充代码…仿照getArea()方法编写】
}
public double getArea()
{
if(boo)
{
double p=(sideA+sideB+sideC)/2.0;
area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC)) ;
return area;
}
else
{
System.out.println("不是一个三角形,不能计算面积");
return 0;
}
}
public void setABC(double a,doubleb,double c)
{
//参数a,b,c分别赋值给sideA,sideB,sideC
【补充代码…】
if(【补充代码】) //a,b,c构成三角形的条件表达式
{
【补充代码】 //给boo赋值。
}
else
{
【补充代码】 //给boo赋值。
}
}
}
// Lader.java
class Lader//梯形
{
double above,bottom,height,area;
Lader(double a,doubleb,double h)
{
//带参数的构造方法,将参数a,b,h分别赋值给above,bottom,height 【补充代码…】
}
double getArea()
{
//方法体,,要求计算出area返回
【补充代码…】
}
}
// Circle.java
class Circle //圆形
{
double radius,area, length;
Circle(double r)
{
//带参数的构造方法
【补充代码】
}
double getArea()
{
//方法体,要求计算出area返回
【补充代码…】
}
double getLength()
{
//getArea方法体的代码,要求计算出length返回【补充代码…】
}
void setRadius(double newRadius)
{
radius=newRadius;
}
double getRadius()
{
return radius;
}
}
// AreaAndLength.java
public class AreaAndLength
{
public static void main(String args[])
{
double length,area;
Circle circle = null;
Trangletrangle = null;
Laderlader = null;
【补充代码】 //创建对象circle(半径为5)
【补充代码】 //创建对象trangle(边长分别为3,4,5)
【补充代码】 //创建对象lader
【补充代码】 // circle调用方法返回周长并赋值给length
System.out.println("圆的周长:"+length);
【补充代码】 // circle调用方法返回面积并赋值给area
System.out.println("圆的面积:"+area);
【补充代码】 // trangle调用方法返回周长并赋值给length
System.out.println("三角形的周长:"+length);
【补充代码】 // trangle调用方法返回面积并赋值给area
System.out.println("三角形的面积:"+area);
【补充代码】 // lader调用方法返回面积并赋值给area
System.out.println("梯形的面积:"+area);
【补充代码】 // trangle调用方法设置三个边,要求将三个边修改为12,34,1。【补充代码】 // trangle调用方法返回面积并赋值给area
System.out.println("三角形的面积:"+area);
【补充代码】 // trangle调用方法返回周长并赋值给length
System.out.println("三角形的周长:"+length);
}
}
2. 掌握上转型对象的使用,多态的特性
定义一个抽象(abstract)类,类名为Employee。 Employee的子类有YearWorker、MonthWorker和WeekWorker。YearWorker对象按年领取薪水(每年10万),MonthWorker对象按月领取薪水(每月1万),WeekWorker对象按周领取薪水(每周0.5万,设定一个月4周)。Employee类有一个抽象(abstract)方法:
public abstract double earnings();
子类必须重写父类的earnings()方法,给出各自领取每年报酬的具体方式。
有一个Company类,该类用Employee数组作为成员,Employee数组的单元可以是YearWorker 对象、MonthWorker对象、WeekWorker对象的上转型对象。程序能输出Company对象一年需要支付的薪水总额。
请按模版要求,将代码补充完整。
abstractclass Employee {
publicabstractdouble earnings();
}
class YearWorker extends Employee {
【补充代码…】//重写earnings()方法
}
class MonthWorker extends Employee {
【补充代码…】//重写earnings()方法
}
class WeekWorker extends Employee {
【补充代码…】//重写earnings()方法
}
class Company {
Employee[] employees;
double salaries = 0;
Company(Employee[] employees) {
this.employees = employees;
}
publicdouble salariesPay() {
salaries = 0;
【补充代码…】//计算salaries
return salaries;
}
}
publicclass HardWork {
publicstaticvoid main(String[] args) {
Employee[] employees = new Employee[20];
for (int i = 0; i if(i%3==0) employees[i] = new WeekWorker(); elseif(i%3==1) employees[i] = new MonthWorker(); elseif(i%3==2) employees[i] = new YearWorker(); } Company company = new Company(employees); System.out.println("公司年工资总额:" + company.salariesPay()); } } 3.掌握嵌套类和内部类的概念和用法 编写一个程序要求定义一个外部类Outer,然后在Outer类中定义一个内部类Inner和局部类Local,内部类Inner和局部类Local的任务都是显示出外部类中的数组元素,然后求出这些数组元素的平均值。 请按模版要求,将代码补充完整。 class Outer { privateint data[]; Outer(int x[]) { data = x; } void checkInner() { Inner innerObj = new Inner(); 【补充代码】// 调用Inner对象的show()方法 System.out.println("内部类计算的平均值: " + innerObj.average()); } void checkLocal() { class Local { void show() { System.out.print("从局部类显示数组元素:"); for (int i = 0; i System.out.print(data[i] + " "); } System.out.println(); } int average() { int sum = 0; for (int i = 1; i sum += data[i]; } 【补充代码】// 返回data数组的平均值 } } Local localObj = new Local(); localObj.show(); System.out.println("局部类计算的平均值: "+ localObj.average()); } class Inner { void show() { System.out.print("从内部类显示数组元素:"); for (int i = 0; i 【补充代码】// 打印data数组的每个元素 } System.out.println(); } int average() { int sum = 0; for (int i = 1; i sum += data[i]; } return sum / data.length; } } } publicclass InnerClassTest { publicstaticvoid main(String[] args) { int a[] = { 6, 8, 9, 22, 34, 7, 2, 1, 15 }; Outer outerObj = new Outer(a); outerObj.checkInner(); 【补充代码】// 调用outerObj对象的checkLocal方法 } } 4.编写一个学生信息管理系统,掌握接口的定义方法以及类的继承、封装和多态的特 性。(选做) 图学生信息管理系统类图 1)定义学生类Student.java,该类有学号、姓名和系部三个成员变量,并用get 和set方法进行属性的封装,请参考类图进行编写。 2)定义接口IStudentDAO,其中包含下列数据操作方法 // 插入学生信息记录 publicvoid insertStudent(Student stu); // 删除指定学号学生信息记录 publicvoid deleteStudent(String sno); // 更新指定学生信息记录 publicvoid updateStudent(Student stu); // 按学号查询指定学生信息记录 public Student findStudentBySno(String sno); // 显示指定学号学生信息记录 publicvoid displayStudentBySno(String sno); // 显示所有学生信息记录 publicvoid displayAllStudent(); 3)定义接口IStudentDAO的实现类StudentDAOImpl,其中包含一个静态的集合对 象用来保存学生信息记录,以及接口的所有实现方法,请参考类图进行编写。代码提示: static List ArrayList类是实现了List接口的动态数组,数组元素可以动态增加和减少。常用方法如下: public int size()返回此列表中的元素数。 public booleanisEmpty()如果此列表中没有元素,则返回 true public boolean add(E e)将指定的元素添加到此列表的尾部。 public boolean remove(Object o)移除此列表中首次出现的指定元素(如果存在)。 /** * 显示所有学生信息记录参考代码 */ @Override publicvoid displayAllStudent() { if (students.size() > 0) { for (Student stu :students) { System.out.println("学号: " + stu.getSno() + "\t姓名: " + stu.getSname() + "\t系部: " + stu.getSdept()); } }else { System.out.println("数据库中无学生记录!"); } } 4)定义主类MainClass,实现应用程序的所有逻辑功能。参考代码如下: import java.util.Scanner; publicclass MainClass { /** * 菜单显示 * @param scanner * @return int */ staticint menu_select(Scanner scanner) { int menuchoice = -1; System.out.printf("\n"); System.out.printf("\t\t\t 学生信息管理系统功能菜单\n"); System.out.printf("\t\t\t 作者:齐心\n"); System.out.printf("\t\t\t ======================= \n"); System.out.printf("\t\t\t 1.插入学生信息记录\n"); System.out.printf("\t\t\t 2.删除学生信息记录\n"); System.out.printf("\t\t\t 3.更新学生信息记录\n"); System.out.printf("\t\t\t 4.显示所有学生信息记录\n"); System.out.printf("\t\t\t 5.按学号查询指定学生信息\n"); System.out.printf("\t\t\t 0.结束程序\n"); System.out.printf("\t\t\t ======================= \n"); System.out.printf("\t\t\t请输入您的选择:\n"); menuchoice = scanner.nextInt(); return menuchoice; } /** * 输入学生信息 * @param stu * @param scanner */ staticvoid inputStudent(Student stu, Scanner scanner) { System.out.println("请输入学生的学号:"); stu.setSno(scanner.next()); System.out.println("请输入学生的姓名:"); stu.setSname(scanner.next()); System.out.println("请输入学生的系部:"); stu.setSdept(scanner.next()); } /** * 更新学生信息 * @param stu * @param scanner */ staticvoid updateStudent(Student stu, Scanner scanner) { System.out.println("请输入要更新的学生的姓名:"); stu.setSname(scanner.next()); System.out.println("请输入要更新的学生的系部:"); stu.setSdept(scanner.next()); } /** * 主函数 * @param args */ publicstaticvoid main(String[] args) { String sno; int menuChoice; Scanner scanner = new Scanner(System.in); StudentDAOImplstudentDAOImpl = new StudentDAOImpl(); do { menuChoice = menu_select(scanner); switch (menuChoice) { // 插入学生信息记录 case 1: Student newStu = new Student(); inputStudent(newStu, scanner); studentDAOImpl.insertStudent(newStu); break; // 删除学生信息记录 case 2: System.out.println("请输入要删除学生信息的学号:"); sno = scanner.next(); studentDAOImpl.deleteStudent(sno); break; // 更新学生信息记录 case 3: System.out.println("请输入要更新学生信息的学号:"); sno = scanner.next(); Student updateStu = studentDAOImpl.findStudentBySno(sno); if (updateStu != null) { System.out.println("要更新的学生信息显示如下:"); studentDAOImpl.displayStudentBySno(updateStu.getSno()); updateStudent(updateStu, scanner); studentDAOImpl.updateStudent(updateStu); } else { System.out.println("要更新的学生信息不存在!"); } break; // 显示所有学生信息记录 case 4: studentDAOImpl.displayAllStudent(); break; // 按学号查询指定学生信息 case 5: System.out.println("请输入查询学生信息的学号:"); sno = scanner.next(); studentDAOImpl.displayStudentBySno(sno); break; case 0: break; default: System.out.println("对不起,您输入的功能编号有错!请重新输入!!!"); break; } } while (menuChoice != 0); scanner.close(); } } 实验总结 请书写你对本次实验有哪些实质性的收获和体会,以及对本次实验有何良好的建议? 实验目的与要求: 1.掌握类的继承与派生关系以及实验方法,理解类的层次结构。 2.掌握派生类构造函数初始化基类成员和对象成员的方法。 3.掌握内联函数和默认函数。 4.掌握赋值兼容原则,掌握派生类的复制构造函数和赋值运算符的定义。 实验过程及内容: 1.实践教程实验二十二P81范例:定义一个继承与派生关系的类体系,在 派生类中访问基类成员。 ①先定义一个点类,包含x,y坐标数据成员,显示函数和计算面积的函数成员; ②以点为基类派生一个圆类,增加表示半径的数据成员,重载显示和计算面积的函数; ③定义一个线段类,以两个点类对象作数据成员,定义显示、求面积及长度函数,线段类采用聚合方式,因为有两个端点,不能用派生。 编程测试所定义的类体系。 本实验教程中有源码,请自行运行,体会和熟悉继承与派生的基本概念及实现方法,掌握派生类构造函数初始化基类成员和对象成员的方法等。2. 实践教程P83编程:多层派生练习,由上题Point类和Circle类继续派生出Cylinder类。要求计算圆柱的底面积、侧面积、全面积和体积。 请编写所有完整的成员函数,并编写主函数进行验证。 数据处理 1. (1) (2)j结果报错,原因是派生类中的成员函数不能访问基类中的私有成员。(3)在Line类中添加两个数据成员。 2. #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: 实验二继承与派生——教师工资计算(一) 一、实验目的 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)当确定后,就进入了源代码的编辑窗口,如图所示: 实验四继承与派生 实验四派生类与继承 【实验类型】验证性实验【实验课时】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() { C++语言程序设计实验答案_继承与派生 实验07 继承与派生(4学时) (第7章继承与派生) 一、实验目的 二、实验任务 7_1 声明一个基类Animal。 有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。 7_2 声明一个基类BaseClass。 有整型成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。 7_3 声明一个车(vehicle)基类。 具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。从bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类。如果不把vehicle设置为虚基类,会有什么问题?编程试试看。 7_4 以实验6中的People(人员)类为基类。 派生出student(学生)类,添加属性:班号char classNo[7]; 派生出teacher(教师)类,添加属性:职务char principalship[11]、部门char department[21]。 从student类中派生出graduate(研究生)类,添加属性:专业char subject[21]、导师teacher adviser; 从graduate类和teacher类派生出TA(助教生)类,注意虚基类的使用。重载相应的成员函数,测试这些类。 类之间的关系如图7-1所示。 图7-1 类图 福建农林大学金山学院实验报告 系(教研室):信息与机电工程系专业:计算机科学与技术年级: 实验课程:面向对象程序设计姓名:学号: 实验室号 计算机号 实验时间:指导教师签字:成绩: 实验4 派生类和继承(一) 一、实验目的和要求 (1)掌握派生类的声明与定义方法,进一步理解类的继承的概念,能够定义和使用类的继承关系。 (2)熟悉公有派生和私有派生的访问特性。 二、实验内容和原理 1、程序分析题(写出程序的输出结果,并分析结果)。 2、(1)定义一个基类animal,该类具有私有整型成员变量age,weight,构造派生类dog公有继承animal,dog类新增私有成员变量color,新增成员函数SetAge(int n)中直接给age赋值,新增成员函数SetWeight(int m)中直接给weight赋值,查看编译结果,并分析结果。(2)将类animal中的age和weight为公有成员,重做第一步,并分析结果。(3)将类animal中的age和weight为保护成员,重做第一步,并分析结果。(4)将派生类dog的继承方式改为私有继承方式和保护继承方式重做以上各小题,并分析结果。 三、实验环境 1. 硬件:PC机; 2. 软件:Windows操作系统、Visual C++ 6.0 四、算法描述及实验步骤 2.1 #include {private:char color[10]; public: int SetAge(int n) {age=n;return n;} int SetWeight (int m) {weight=m;return m; } }; int main() { int x,y; dog a; cout<<"请输入这条狗的岁数="; cin>>x;cout< 继承与组合 一、实验目的 1.了解继承在面向对象程序设计中的重要作用。 2.进一步理解继承与派生的概念。 3.掌握通过继承派生出一个新的类的方法。 4.了解虚基类的作用和用法。 5.掌握类的组合 二、实验内容 1.请先阅读下面的程序,写出程序运行的结果,然后再上机运行程序,验证自己分析的结果是否正确。 (1) #include 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 实验三派生类与继承 一、实验目的 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< 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. 类的继承与派生综合题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)和输出实发工资函数(OutputWage)。 主函数如下: int main() { Salemanobjsale(101101, "LD", 0.88f, 1200, 800, 0.05f, 10000); Manager objmana(101102, "NXG", 0.90f, 2500, 1000, 0.10f, 20000); SaleManagerobjsalemana(101103, "HDY", 0.99f, 3500, 2000, 0.20f, 100000, 0.20f,150000); objsale.Output(); cout<< "销售员的实发工资:" << " "; cout< 内蒙古科技大学 面向对象的程序设计 实验报告 一、实验目的 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) {继承和派生实验报告
c++派生类与继承实验报告材料
派生与继承实验1
实验四 继承与派生讲解学习
C++语言程序设计实验答案_继承与派生教学提纲
实验四:派生类和继承(一)
实验六继承与派生
c++实验3 派生类与继承1
实验3 继承和派生类的应用
类的继承与派生综合题
内蒙古科技大学面向对象的程序设计实验8 继承(一)