文档库

最新最全的文档下载
当前位置:文档库 > 实验三类的多态性的实现

实验三类的多态性的实现

浙江理工大学信息电子学院

实验指导书

实验名称:类的多态性的实现学时安排:3

实验类别:设计性实验实验要求:1人1组

学号: 2012329620058 姓名:胡冰倩班级:计科3班

 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

一、实验目的

1.理解重载运算符的意义。

2.掌握使用成员函数、友员函数重载运算符的特点。

3.掌握重载运算符函数的调用方法。

4.掌握动态联编的概念。

5.掌握虚函数和纯虚函数的使用方法。

二、实验原理介绍

设计性实验

具体原理请见实验内容和步骤

实现对抽象类的继承,通过operator函数调用的形式,实现运算符的重载

三、实验设备介绍

软件需求: Visual C++ 6.0

硬件需求: 对于硬件方面的要求,建议配置是Pentium III 450以上的CPU 处理器,64MB以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示器、打印机。

四、实验内容

1.某公司有老板Boss、雇员Employee、小时工Hourly Worker和营销人员CommWorker,他们的薪金计算方法如下:

老板实行年薪制,如一年15万;雇员按月计酬,方法是:基本工资+奖金;小时工按工作时间计算报酬,方法是:工作小时*每小时单价;营销人员按月计

酬,方法是:基本工资+销售利润*5%。

每类人员都有姓名、职工编号、年龄、性别、工资等数据,各类人员使用统一接口getpay()计算各类人员的应得报酬,print()打印输出各位工作人员的基本数据。设计一个统计并输出该公司每个人员当月薪金情况的报表类Report,该类提供add接口向Report类的数组容器中添加每个员工的信息,并提供print接口用于输出每个员工的姓名、职工编号和其当月获得的报酬。在主函数中对实现的类进行测试,创建各类人员对象,通过Report类的add接口向报表中添加这些人员信息,然后通过Report类的print接口打印报表。

2.设计一个三角形类Triangle,包含三角形三条边长的私有数据成员,另定义一个重载运算符“+”,以实现求任意多个三角形的面积之和,和重载运算符“<<”,实现三角形面积的输出,并在主函数中对实现的类进行测试。

五、程序

#include

#include

using namespace std;

//----class Person-----------

class Person

{

private:

char name[20];

int num;

int age;

char sex[5];

public:

Person(){};

Person(char *,int,int,char*);

virtual ~Person(){};

virtual double getPay()=0;

virtual void print();

};

Person::Person(char *p_name,int p_num,int p_age,char *p_sex)

{

strcpy(name,p_name);

num=p_num;

age=p_age;

strcpy(sex,p_sex);

}

void Person::print()

{

cout<<"姓名:"<

cout<<"年龄"<

}

//------class Boss-----------

class Boss:public Person

{

private:

double pay;

public:

Boss(){};

Boss(char *,int,int,char*,double);

virtual ~Boss(){};

void setPay(double);

virtual double getPay();

virtual void print();

};

Boss::Boss(char *p_name,int p_num,int p_age,char *p_sex,double p_pay) :Person(p_name,p_num,p_age,p_sex)

{

pay=p_pay;

}

void Boss::setPay(double p_pay)

{

pay=p_pay;

}

double Boss::getPay()

{

return pay;

}

void Boss::print()

{

Person::print();

cout<

}

//----------class Employee-----------------------

class Employee:public Person

{

private:

double wage;

double bonus;

public:

Employee(){};

Employee(char *,int,int,char*,double,double);

virtual ~Employee(){};

void setPay(double,double);

virtual double getPay();

virtual void print();

};

Employee::Employee(char *p_name,int p_num,int p_age,char *p_sex,double p_wage,

double p_bonus):Person(p_name,p_num,p_age,p_sex) {

wage=p_wage;

bonus=p_bonus;

}

void Employee::setPay(double p_wage,double p_bonus)

{

wage=p_wage;

bonus=p_bonus;

}

double Employee::getPay()

{

return wage+bonus;

}

void Employee::print()

{

Person::print();

cout<

}

//---------class HourlyWorker--------------------

class HourlyWorker:public Person

{

private:

double worktime;

double price;

public:

HourlyWorker(){};

HourlyWorker(char *,int,int,char*,double,double);

virtual ~HourlyWorker(){};

void setPay(double,double);

virtual double getPay();

virtual void print();

};

HourlyWorker::HourlyWorker(char *p_name,int p_num,int p_age,char *p_sex,

double p_work,double p_price):Person(p_name,p_num,p_age,p_sex)

{

worktime=p_work;

price=p_price;

}

void HourlyWorker::setPay(double p_work,double p_price)

{

worktime=p_work;

price=p_price;

}

double HourlyWorker::getPay()

{

return worktime*price;

}

void HourlyWorker::print()

{

Person::print();

cout<

}

//-------------class CommWorker------------------

class CommWorker:public Person

{

private:

double wage;

double profitonsale;

public:

CommWorker(){};

CommWorker(char *,int,int,char*,double,double);

virtual ~CommWorker(){};

void setPay(double,double);

virtual double getPay();

virtual void print();

};

CommWorker::CommWorker(char *p_name,int p_num,int p_age,char *p_sex,

double p_wage,double p_profitonsale):Person(p_name,p_num,p_age,p_sex)

{

wage=p_wage;

profitonsale=p_profitonsale;

}

void CommWorker::setPay(double p_wage,double p_profitonsale)

{

wage=p_wage;

profitonsale=p_profitonsale;

}

double CommWorker::getPay()

{

return wage+profitonsale*0.05;

}

void CommWorker::print()

{

Person::print();

cout<

}

//----------class Report-----------------

class Report

{

public:

void print(Person &p)

{

p.print();

cout<<"综合工资:"<

}

};

void main()

{

Boss boss1("蓝幽若",1,35,"女",150000);

Employee employee1("慕容熙",2,55,"男",6300,1205.48);

HourlyWorker hourlyworker("古月白",3,22,"女",35.2,218.59);

CommWorker commWorker("战北野",4,29,"男",10500.56,780000);

Report P;

P.print(boss1);

P.print(employee1);

P.print(hourlyworker);

P.print(commWorker);

}

==========================第二题================================== #include

#include

using namespace std;

class Triangle

{

private:

double x,y,z,S;

double getS();

public:

Triangle(){}

Triangle(double ,double ,double );

Triangle operator+(Triangle &b)

{

Triangle temp;

temp.S=S+b.S;

return temp;

}

friend ostream& operator <<(ostream &os,Triangle &Temp) {

os<

return os;

}

};

Triangle::Triangle(double a1,double a2,double a3)

{

x=a1;y=a2;z=a3;

S=getS();

cout<<"三角形三边: "<

}

double Triangle::getS()

{

double s,t;

t=(x+y+z)/2;

s=sqrt(t*(t-x)*(t-y)*(t-z)) ;

return s;

}

int main()

{

Triangle t1(3,4,5);

Triangle t2(6,8,10);

Triangle t3(5,12,13),t4;

cout<<"三个三角形的面积之和: ";

t4=t1+t2+t3;

cout<

return 0;

}

六、运行结果

实验三类的多态性的实现

实验三类的多态性的实现