12.6.3. Creating Concrete Derived Class CommissionEmployee

Class CommissionEmployee (Figs. 12.1312.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


Fig. 12.13. CommissionEmployee class header.


 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


Fig. 12.14. CommissionEmployee class implementation file.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset