C++大学基础教程_12_面向对象编程:继承

//CommisionEmployee.h

//佣金雇员类,薪水完全是销售提成
/*
#ifndef x //先测试x是否被宏定义过
#define x
程序段 1 //如果x没有被宏定义过,定义x,并编译程序段 1
#endif
程序段 2 //如果x已经定义过了则编译程序段2的语句,“忽视”程序段 1。
*/

#ifndef COMMISION_H
#define COMMISION_H

#include <string>
using namespace std;
class CommisionEmployee
{
public:
	//构造函数,参数分别为firstname,lastname,社会保障编号socialSecurityNumber,
	//                            销售额grossSales,销售提成commisionRate。
	CommisionEmployee(const string &,const string &,const string &,
		                           double = 0.0,double = 0.0);
	~CommisionEmployee();//析构函数
	void setFirstName(const string &);
	string getFirstName();
	
	void setLastName(const string &);
	string getLastName();
	
	void setSocialSecurityNumber(const string &);
	string getSocialSecurityNumber();
	
	void setGrossSales(double);
	double getGrossSales();
	
	void setCommisionRate(double);
	double getCommisionRate();

	double earnings();
	void print();

private:
	string firstName;
	string lastName;
	string socialSecurityNumber;
	double grossSales;
	double commisionRate;
};

#endif
//CommisionEmployee.cpp

#include "CommisionEmployee.h"
#include <iostream>

CommisionEmployee::CommisionEmployee( const string &first,const string &last,
	const string &ssn,double sales,double rate)
{
	setFirstName(first);
	setLastName(last);
	setSocialSecurityNumber(ssn);
	setGrossSales(sales);
	setCommisionRate(rate);

	cout << "CommisionEmployee constructor: " << endl;
	print();
	cout << "\n\n";
}

CommisionEmployee::~CommisionEmployee()
{
	cout << "CommisionEmployee destructor: " << endl;
	print();
	cout << "\n\n";
}

void CommisionEmployee::setFirstName(const string &first)
{
	firstName = first;
}

string CommisionEmployee::getFirstName()
{
	return firstName;
}

void CommisionEmployee::setLastName(const string &last)
{
	lastName = last;
}

string CommisionEmployee::getLastName()
{
	return lastName;
}

void CommisionEmployee::setSocialSecurityNumber(const string &ssn)
{
	socialSecurityNumber = ssn;
}

string CommisionEmployee::getSocialSecurityNumber()
{
	return socialSecurityNumber;
}

void CommisionEmployee::setGrossSales(double sales)
{
	grossSales = (sales < 0.0)? 0.0:sales;
}

double CommisionEmployee::getGrossSales()
{
	return grossSales;
}

void CommisionEmployee::setCommisionRate(double rate)
{
	commisionRate = (rate > 0.0)? rate:0.0 ;
}

double CommisionEmployee::getCommisionRate()
{
	return commisionRate;
}

double CommisionEmployee::earnings()
{
	return getCommisionRate()*getGrossSales();
}

void CommisionEmployee::print()
{
	cout << "commision employee :" << getFirstName() << " " 
		   << getLastName() << endl;
	cout << "social security number :" << getSocialSecurityNumber() 
		   << "\ngross sales :" << getGrossSales()
		   << "\ncommision rate :" << getCommisionRate() << endl;
}
//BasePlusCommisionEmployee.h

//带底薪佣金雇员类,薪水由底薪和提成构成

#ifndef BASEPLUSCOMMISIONEMPLOYEE_H
#define BASEPLUSCOMMISIONEMPLOYEE_H

#include "CommisionEmployee.h"
#include <string>
using namespace std;

class BasePlusCommisionEmployee :public CommisionEmployee
{
public:
	BasePlusCommisionEmployee(const string &,const string &,const string &,
		                                        double = 0.0,double = 0.0,double = 0.0);
	~BasePlusCommisionEmployee();
	void setBaseSalary(double);
	double getBaseSalary();
	double earnings();
	void print();
private:
	double baseSalary;
};

#endif
//BasePlusCommisionEmployee.cpp

#include "BasePlusCommisionEmployee.h"
#include <iostream>
using namespace std;

BasePlusCommisionEmployee::BasePlusCommisionEmployee(const string &first,
	const string &last,const string &ssn,double sales,double rate,double salary)
	:CommisionEmployee(first,last,ssn,sales,rate)
{
	setBaseSalary(salary);

	cout << "BasePlusCommisionEmployee constructor: " << endl;
	print();
	cout << "\n\n";
}

BasePlusCommisionEmployee::~BasePlusCommisionEmployee()
{
	cout << "BasePlusCommisionEmployee destructor: " << endl;
	print();
	cout << "\n\n";
}

void BasePlusCommisionEmployee::setBaseSalary(double salary)
{
	baseSalary = salary;
}

double BasePlusCommisionEmployee::getBaseSalary()
{
	return baseSalary;
}

double BasePlusCommisionEmployee::earnings()
{
	return getBaseSalary() + CommisionEmployee::earnings();
}

void BasePlusCommisionEmployee::print()
{
	cout << "base-salaried " ;
	CommisionEmployee::print();
	cout << "base salary :" << getBaseSalary() << endl;
}
//mian.cpp

#include "BasePlusCommisionEmployee.h"
#include "CommisionEmployee.h"
#include <iostream>
#include <iomanip> 
using namespace std;

//这个实例旨在明晰继承关系中的析构函数与构造函数调用顺序!!!
int main()
{
	cout << fixed << setprecision(2);
	{
	CommisionEmployee cemployee("Bob","Swift","0123-7890-32",5000,0.04);
	cemployee.print();
	cout << "employee's earning is " << cemployee.earnings();
	cemployee.setCommisionRate(0.05);
	cout << "\n\nUpdate employee information output by print function:" << endl;
	cemployee.print();
	cout << "employee's earning is " << cemployee.earnings();
	cout << endl << endl;
	}
	{
	BasePlusCommisionEmployee bpcemployee("Jax","Lanester","0341-8907-82",8000,0.04,800);
	bpcemployee.print();
	cout << "employee's earning is " << bpcemployee.earnings() << endl;
	bpcemployee.setCommisionRate(0.06);
	cout << "\nUpdate employee information output by print function:" << endl;
	bpcemployee.print();
	cout << "employee's earning is " << bpcemployee.earnings();
	cout << "\n\n";
 	}
	system("pause >> cout");
	return 0;
}

猜你喜欢

转载自jia-shun.iteye.com/blog/2091713