Class CommissionEmployee
(Figs. 12.13–12.14) derives from Employee
(Fig. 12.13, line 9). The member-function implementations (Fig. 12.14) include a constructor (lines 9–15) that takes a first name, last name, social security number, sales amount and commission rate; set functions (lines 18–24 and 33–39) to assign new values to data members commissionRate
and grossSales
, respectively; get functions (lines 27–30 and 42–45) that retrieve their values; function earnings
(lines 48–51) to calculate a CommissionEmployee
’s earnings; and function print
(lines 54–60) to output the employee’s type, namely, "commission employee: "
and employee-specific information. The constructor passes the first name, last name and social security number to the Employee
constructor (line 11) to initialize Employee
’s private
data members. Function print
calls base-class function print
(line 57) to display the Employee
-specific information.
1 // Fig. 12.13: CommissionEmployee.h
2 // CommissionEmployee class derived from Employee.
3 #ifndef COMMISSION_H
4 #define COMMISSION_H
5
6 #include <string> // C++ standard string class
7 #include "Employee.h" // Employee class definition
8
9 class CommissionEmployee : public Employee
10 {
11 public:
12 CommissionEmployee( const std::string &, const std::string &,
13 const std::string &, double = 0.0, double = 0.0 );
14 virtual ~CommissionEmployee() { } // virtual destructor
15
16 void setCommissionRate( double ); // set commission rate
17 double getCommissionRate() const; // return commission rate
18
19 void setGrossSales( double ); // set gross sales amount
20 double getGrossSales() const; // return gross sales amount
21
22 // keyword virtual signals intent to override
23 virtual double earnings() const override; // calculate earnings
24 virtual void print() const override; // print object
25 private:
26 double grossSales; // gross weekly sales
27 double commissionRate; // commission percentage
28 }; // end class CommissionEmployee
29
30 #endif // COMMISSION_H
1 // Fig. 12.14: CommissionEmployee.cpp
2 // CommissionEmployee class member-function definitions.
3 #include <iostream>
4 #include <stdexcept>
5 #include "CommissionEmployee.h" // CommissionEmployee class definition
6 using namespace std;
7
8 // constructor
9 CommissionEmployee::CommissionEmployee( const string &first,
10 const string &last, const string &ssn, double sales, double rate )
11 : Employee( first, last, ssn )
12 {
13 setGrossSales( sales );
14 setCommissionRate( rate );
15 } // end CommissionEmployee constructor
16
17 // set gross sales amount
18 void CommissionEmployee::setGrossSales( double sales )
19 {
20 if ( sales >= 0.0 )
21 grossSales = sales;
22 else
23 throw invalid_argument( "Gross sales must be >= 0.0" );
24 } // end function setGrossSales
25
26 // return gross sales amount
27 double CommissionEmployee::getGrossSales() const
28 {
29 return grossSales;
30 } // end function getGrossSales
31
32 // set commission rate
33 void CommissionEmployee::setCommissionRate( double rate )
34 {
35 if ( rate > 0.0 && rate < 1.0 )
36 commissionRate = rate;
37 else
38 throw invalid_argument( "Commission rate must be > 0.0 and < 1.0" );
39 } // end function setCommissionRate
40
41 // return commission rate
42 double CommissionEmployee::getCommissionRate() const
43 {
44 return commissionRate;
45 } // end function getCommissionRate
46
47 // calculate earnings; override pure virtual function earnings in Employee
48 double CommissionEmployee::earnings() const
49 {
50 return getCommissionRate() * getGrossSales();
51 } // end function earnings
52
53 // print CommissionEmployee's information
54 void CommissionEmployee::print() const
55 {
56 cout << "commission employee: ";
57 Employee::print(); // code reuse
58 cout << "
gross sales: " << getGrossSales()
59 << "; commission rate: " << getCommissionRate();
60 } // end function print