//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;
}