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