C How To Program Plus Mylab Programming With Pearson Etext -- Access Card Package (8th Edition)
C How To Program Plus Mylab Programming With Pearson Etext -- Access Card Package (8th Edition)
8th Edition
ISBN: 9780134227023
Author: Paul J. Deitel; Harvey Deitel
Publisher: PEARSON
Question
Book Icon
Chapter 19, Problem 19.3E
Program Plan Intro

To implement the BasePlusCommissionEmp class using composition instead of inheritance and invoke different functions in the test program subsequently.

Expert Solution & Answer
Check Mark

Explanation of Solution

Program:

// BasePlusCommissionEmp class definition .
#ifndef BP_COMMISSION_H
#define BP_COMMISSION_H
#include<string>// C++ standard string class
usingnamespacestd;
classBasePlusCommissionEmp
{
public:
BasePlusCommissionEmp(conststring&, conststring&, conststring&,
		double = 0.0,double = 0.0, double = 0.0 );
//For generic attributes of Employee
	voidsetFirstName( conststring& ); // set first name
	stringgetFirstName() const; // return first name
	voidsetLastName( conststring& ); // set last name
	stringgetLastName() const; // return last name
	voidsetSocialSecurityNumber( conststring& ); // set SSN
	stringgetSocialSecurityNumber() const; // return SSN

// additional functions for attributes of CommisionEmployee
	voidsetGrossSales( double ); // set gross sales amount
	doublegetGrossSales() const; // return gross sales amount
	voidsetCommissionRate( double ); // set commission rate
	doublegetCommissionRate() const; // return commission rate

//additional functions for baseSalary
	voidsetBaseSalary( double ); // set base salary
	doublegetBaseSalary() const; // return base salary

// Generic functions of Employee
	doubleearnings() const;
	voidprint() const;

private:
	//Generic attributes of Employee
	stringfirstName; // composition: member object
	stringlastName; // composition: member object
	stringsocialSecurityNumber; //composition: member object
	//attributes of CommisionEmployee
	doublegrossSales; // gross weekly sales
	doublecommissionRate; // commission percentage

	//attribute for BaseSalary
	doublebaseSalary; // base salary
}; // end class BasePlusCommissionEmp
#endif

//BasePlusCommisionEmp.cpp
/* BasePlusCommissionEmp.cpp using composition Created on: 31-Jul-2018 :rajesh@acroknacks.com */
#include<string>// C++ standard string class
#include"BasePlusCommissionEmp.h"
#include<iostream>
usingnamespacestd;

BasePlusCommissionEmp::BasePlusCommissionEmp(conststring&fname, conststring&lname, conststring&ssn1,
		doublebaseSalary, doublegrossSales , doublecomRate )
:firstName (fname), lastName ( lname),socialSecurityNumber (ssn1 )
{
	setBaseSalary(baseSalary ); // validate and store base salary
	setGrossSales(grossSales);//validate and store gross sales
	setCommissionRate(comRate);//validate and store commision rate

}// end constructor

/&Functions Below  are specific to This class */
// set gross sales amount
voidBasePlusCommissionEmp::setGrossSales( double sales )
	{
	if ( sales **gt;= 0.0 )
		grossSales = sales;
	else
		throwinvalid_argument( "Gross sales must be >= 0.0" );
} // end function setGrossSales

// return gross sales amount
doubleBasePlusCommissionEmp::getGrossSales() const
{
	returngrossSales;
} // end function getGrossSales

// set commission rate
voidBasePlusCommissionEmp::setCommissionRate( double rate )
{

	if ( rate > 0.0 && rate < 1.0 )
		commissionRate = rate;
	else
		throwinvalid_argument( "Commission rate must be > 0.0 and < 1.0" );
} // end function setCommissionRate
doubleBasePlusCommissionEmp::getCommissionRate() const
{
	returncommissionRate;
} // end function getCommissionRate

voidBasePlusCommissionEmp::setBaseSalary( double salary )
{
	if ( salary >= 0.0 )
	baseSalary = salary;
	else
	throwinvalid_argument( "Salary must be >= 0.0" );
} // end function setBaseSalary
// return base salary
doubleBasePlusCommissionEmp::getBaseSalary() const
{
	returnbaseSalary;
} // end function getBaseSalary

//compute earnings
doubleBasePlusCommissionEmp::earnings() const
{
	return ( (getCommissionRate() * getGrossSales()) + getBaseSalary()) ;
} // end function earnings
// print CommissionEmployee object
voidBasePlusCommissionEmp::print() const
{
	cout<<"\nBasePlusCommission employee: ";
	cout<<lastName<<", "<<firstName<<endl;
	cout<<"SSN : "<<socialSecurityNumber<<endl;
	cout<<"\n gross sales: $ "<<getGrossSales()
	<<"\n Base Salary: $ "<<getBaseSalary()
	<<"\n commission rate: "<<getCommissionRate() ;
} // end function print

/&Generic Employee functions **/
// set first name
voidBasePlusCommissionEmp::setFirstName( conststring**first )
{
	firstName = first; // should validate
} // end function setFirstName
// return first name
stringBasePlusCommissionEmp::getFirstName() const
{
	returnfirstName;
} // end function getFirstName
// set last name
voidBasePlusCommissionEmp::setLastName( conststring&last )
{
	lastName = last; // should validate
} // end function setLastName
// return last name
stringBasePlusCommissionEmp::getLastName() const
{
	returnlastName;
} // end function getLastName
// set social security number
voidBasePlusCommissionEmp::setSocialSecurityNumber( conststring&ssn )
{
	socialSecurityNumber = ssn; // should validate
} // end function setSocialSecurityNumber
// return social security number
stringBasePlusCommissionEmp::getSocialSecurityNumber() const
{
	returnsocialSecurityNumber;
} // end function getSocialSecurityNumber

Test Program

// Testing class BasePlusCommissionEmp.
#include<iostream>
#include<iomanip>
#include"BasePlusCommissionEmp.h"// BasePlusCommissionEmp class definition
usingnamespacestd;
intmain()
{
// instantiate a BasePlusCommissionEmp object
	BasePlusCommissionEmpemployee("Sue", "Jones", "222-22-2222",1500,10000,0.16 );
	// get commission employee data
	cout<<"Employee information obtained by get functions: \n"
			<<"\nFirst name is "<<employee.getFirstName()
			<<"\nLast name is "<<employee.getLastName()
			<<"\nSocial security number is "
			<<employee.getSocialSecurityNumber()
			<<"\nBase Salary is $"<<employee.getBaseSalary()
			<<"\nGross sales is $"<<employee.getGrossSales()
			<<"\nCommission rate is $"<<employee.getCommissionRate() <<endl;

	cout<<"Earnings based on current Data : $"<<employee.earnings();
	//Modify Sales data
		employee.setGrossSales( 8000 ); // set gross sales
		employee.setCommissionRate( .1 ); // set commission rate
cout<<"\nUpdated employee information output by print function: \n"
<<endl;
employee.print(); // display the new employee information
// display the employee's earnings
cout<<"\n\n Updated Employee's earnings: $"<<employee.earnings() <<endl;
} // end main

Explanation:

Theabove program demonstrates composition as an alternate way of implementing functionality in Object oriented programming.

Composition increases duplicity of code as seen in BasePlusCommissionEmp class where a large part of attributes and functions of the Employee class have to be repeated in the BasePlusCommissionEmp class.

Also, the test code or the actual application using these objects becomes more complicated because the use of Data structures like Vectors to store all similar objects together and invoke common functionality in a single loop gets limited.

If there are a large number of objects with similar functionality and a little variances, the redundant code soon becomes prone to defect and maintenance nightmares. On the other hand, composition provides more control at the compile time by limiting common access modifier errors and method overriding errors during development time.

The has-a relationship is suited mostly where there is limited or no commonality in attributes and functionality of the objects being modelled.

It’s always better to create an is-a class hierarchy whenthe objects being modelled are having a lot of common attributes and method, resulting in a generic common subset (the base class) and other derived class specializing form it. Inheritance makes the code cleaner to write, read and maintain.

Sample Output:

Employee information obtained by get functions: 

First name is Sue
Last name is Jones
Social security number is 222-22-2222
Base Salary is $1500
Gross sales is $10000
Commission rate is $0.16
Earnings based on current Data : $3100
Updated employee information output by print function: 


BasePlusCommission employee: Jones, Sue
SSN : 222-22-2222

gross sales: $ 8000
 Base Salary: $ 1500
commission rate: 0.1

 Updated Employee's earnings: $2300

Want to see more full solutions like this?

Subscribe now to access step-by-step solutions to millions of textbook problems written by subject matter experts!
Students have asked these similar questions
4G+ Vo) % 1.1. LTE1 : Q B NIS شوز طبي ۱:۱۷ کا A X حاز هذا على إعجاب Mohamed Bashar. MEDICAL SHOE شوز طبي ممول . اقوى عرض بالعراق بلاش سعر القطعة ١٥ الف سعر القطعتين ٢٥ الف سعر 3 قطع ٣٥ الف القياسات : 40-41-42-43-44- افحص وكدر ثم ادفع خدمة التوصيل 5 الف لكافة محافظات العراق ופרסם BNI SH ופרסם DON JU WORLD DON JU MORISO DON JU إرسال رسالة III Messenger التواصل مع شوز طبي تعليق باسم اواب حمید
A manipulator is identified by the following table of parameters and variables:a. Obtain the transformation matrices between adjacent coordinate frames and calculate the global transformation matrix.
Which tool takes the 2 provided input datasets and produces the following output dataset? Input 1: Record First Last Output: 1 Enzo Cordova Record 2 Maggie Freelund Input 2: Record Frist Last MI ? First 1 Enzo Last MI Cordova [Null] 2 Maggie Freelund [Null] 3 Jason Wayans T. 4 Ruby Landry [Null] 1 Jason Wayans T. 5 Devonn Unger [Null] 2 Ruby Landry [Null] 6 Bradley Freelund [Null] 3 Devonn Unger [Null] 4 Bradley Freelund [Null] OA. Append Fields O B. Union OC. Join OD. Find Replace Clear selection
Knowledge Booster
Background pattern image
Similar questions
SEE MORE QUESTIONS
Recommended textbooks for you
Text book image
C++ Programming: From Problem Analysis to Program...
Computer Science
ISBN:9781337102087
Author:D. S. Malik
Publisher:Cengage Learning
Text book image
C++ for Engineers and Scientists
Computer Science
ISBN:9781133187844
Author:Bronson, Gary J.
Publisher:Course Technology Ptr
Text book image
Microsoft Visual C#
Computer Science
ISBN:9781337102100
Author:Joyce, Farrell.
Publisher:Cengage Learning,
Text book image
Programming Logic & Design Comprehensive
Computer Science
ISBN:9781337669405
Author:FARRELL
Publisher:Cengage
Text book image
EBK JAVA PROGRAMMING
Computer Science
ISBN:9781337671385
Author:FARRELL
Publisher:CENGAGE LEARNING - CONSIGNMENT
Text book image
New Perspectives on HTML5, CSS3, and JavaScript
Computer Science
ISBN:9781305503922
Author:Patrick M. Carey
Publisher:Cengage Learning