
Concept explainers
Modify the definition of the class Money shown in Display 11.8 so that all of the following are added:
a. The operators <, <=, >, and >= have each been overloaded to apply to the type Money. (Hint: See Self-Test Exercise 13.)
b. The following member function has been added to the class definition. (We show the function declaration as it should appear in the class definition. The definition of the function itself will include the qualifier Money::.)
Money percent(int percentFigure) const; //Returns a percentage of the money amount in the //calling object. For example, if percentFigure is 10, //then the value returned is 10% of the amount of //money represented by the calling object. |
For example, if purse is an object of type Money whose value represents the amount $100.10, then the call
purse.percent(10); |
returns 10% of $100.10; that is, it returns a value of type Money that represents the amount $10.01.

“Money” Class
Program plan:
- Include required header file.
- Define a class for “Money”.
- Declare the function for overload operator “<”, “<=”, “>’, “>=”, “+”, “-” and “==”.
- Declare the constructor for “Money” class.
- Declare the function for compute total amount, total dollars and total cents.
- Declare the function for “percent” function.
- Declare the function for operator “>>” and “<<”.
- Declare required variables.
- Define function for overload operator “<”, “<=”, “>” and “>=”.
- Define function for “percent”.
- This function is used to compute the percentage amount for given money.
- Define function for arithmetic operator “+” and “-” with two arguments.
- Define function for overload operator “==”.
- Define function for overload operator “-” with one parameter.
- Define default constructor for “Money” class, constructor with one argument and two arguments.
- Define the function “computeTotalAmount”.
- This function is used to compute the total amount.
- Define the function “computeTotalDollars”.
- This function is used to compute the dollars in given amount.
- Define the function “computeTotalCents”.
- This function is used to compute the cents in given amount.
- Define the function “forDollarConversion” which is used to convert amount to dollar
- Define the function “forCentsConversion” which is used to convert the amount to cents.
- Define the function “forRoundedValue” which is used for convert the result in rounded value.
- Define function for input and output operator.
- Define main function
- Create an object for “Money” class.
- Create an object for “Money” class with argument.
- Declare variable for file input and file output.
- Open the given input file.
- Check the given file is found or not using “if” loop.
- Read the amount from file.
- Display the purse amount.
- Compare the given amount and purse amount.
- Compute sum of amount and purse and display it.
- Compute the difference of two amount and display it.
- Check the amount using the comparison operator “>=”.
- Check the amount using the comparison operator “>”.
- Check the amount using the comparison operator “<=”.
- Check the amount using the comparison operator “<”.
- Finally close input and output file.
The below C++ program is used to implement the “Money” class with the overload operators such as “<”, “<=”, “>” and “>=” and compute the percent of given amount.
Explanation of Solution
Program:
#include<iostream>
#include<fstream>
#include<cstdlib>
#include<cmath>
using namespace std;
//Create a class name, Money
class Money
{
public:
//Function declaration for operators <, <=, >, and >=
friend bool operator < (const Money& amount1, const Money& amount2);
friend bool operator <= (const Money& amount1, const Money& amount2);
friend bool operator > (const Money& amount1, const Money& amount2);
friend bool operator >= (const Money& amount1, const Money& amount2);
//Function declaration for operators +, -, and ==
friend Money operator + (const Money& amount1, const Money& amount2);
friend Money operator - (const Money& amount1, const Money& amount2);
friend Money operator - (const Money& amount);
friend bool operator == (const Money& amount1, const Money& amount2);Money();
//Constructor for "Money" class
Money(double amount);
Money(int dollars, int cents);
Money(int nDollars);
/* Function declaration for compute total amount, total dollars and total cents */
double computeTotalAmount() const;
int computeTotalDollars() const;
int computeTotalCents() const;
/* Function declaration for compute the percent for given amount */
Money percent(int percentFigure) const;
friend istream& operator >>(istream& ins, Money& amount);
//Overloads the >> operator so it can be used to input values of type Money.
//Notation for inputting negative amounts is as in -$100.00.
//Precondition: If ins is a file input stream, then ins has already been
//connected to a file.
friend ostream& operator <<(ostream& outs, const Money& amount);
//Overloads the << operator so it can be used to output values of type Money.
//Precedes each output value of type Money with a dollar sign.
//Precondition: If outs is a file output stream,
//then outs has already been connected to a file.
private:
//Declare member variables
int dollars, cents;
int forDollarConversion(double amount) const;
int forCentsConversion(double amount) const;
int forRoundedValue(double number) const;
};
//Function definition of operator '<'
bool operator < (const Money& amount1, const Money& amount2)
{
//Return given result
return (amount1.dollars < amount2.dollars) ||
((amount1.dollars == amount2.dollars) &&
(amount1.cents < amount2.cents));
}
//Function definition of operator '<='
bool operator <= (const Money& amount1, const Money& amount2)
{
//Return given result
return ((amount1.dollars < amount2.dollars) || ((amount1.dollars == amount2.dollars) &&
(amount1.cents < amount2.cents)))
|| ((amount1.dollars == amount2.dollars)
&& (amount1.cents == amount2.cents));
}
//Function definition of operator '>'
bool operator > (const Money& amount1, const Money& amount2)
{
//Return given result
return (amount1.dollars > amount2.dollars)
|| ((amount1.dollars == amount2.dollars) && (amount1.cents > amount2.cents));
}
//Function definition of operator '>='
bool operator >=(const Money& amount1, const Money& amount2)
{
//Return given result
return ((amount1.dollars > amount2.dollars) ||
((amount1.dollars == amount2.dollars) &&
(amount1.cents > amount2.cents))) ||
((amount1.dollars == amount2.dollars) &&
(amount1.cents == amount2.cents));
}
//Function definition of percent
Money Money::percent(int percentFigure) const
{
int d = dollars * percentFigure / 100;
int c = dollars * percentFigure % 100 + cents * percentFigure / 100;
return Money(d, c);
}
//Function definition of operator '+'
Money operator + (const Money& amount1, const Money& amount2)
{
int cent1 = amount1.cents + amount1.dollars * 100;
int cent2 = amount2.cents + amount2.dollars * 100;
int totalCents = (cent1 + cent2);
int aCents = abs(totalCents);
int tDollars = aCents / 100;
int tCents = aCents % 100;
if (totalCents < 0)
{
tDollars = -tDollars;
tCents = -tCents;
}
//Return given result
return Money(tDollars, tCents);
}
//Function definition of operator '-' for two arguments
Money operator -(const Money& amount1, const Money& amount2)
{
int c1 = amount1.cents + amount1.dollars * 100;
int c2 = amount2.cents + amount2.dollars * 100;
int differCents = c1 - c2;
int aCents = abs(differCents);
int tDollars = aCents / 100;
int tCents = aCents % 100;
if (differCents < 0)
{
tDollars = -tDollars;
tCents = -tCents;
}
//Return given result
return Money(tDollars, tCents);
}
//Function definition of operator '=='
bool operator == (const Money& amount1, const Money& amount2)
{
//Return given result
return((amount1.dollars == amount2.dollars) && (amount1.cents == amount2.cents));
}
//Function definition of operator '-' for one argument
Money operator - (const Money& amount)
{
//Return given result
return Money(-amount.dollars, -amount.cents);
}
//Constructor initialization
Money::Money(): dollars(0), cents(0)
{
}
//Constructor for "Money" class
Money::Money(double amount): dollars(forDollarConversion(amount)), cents(forCentsConversion(amount))
{
}
//Constructor for "Money" class
Money::Money(int d): dollars(d), cents(0)
{
}
//Constructor for "Money" class
Money::Money(int d, int c)
{
if ((d < 0 && c > 0) || (d > 0 && c < 0))
{
cout << "The given data is invalid" << endl;
exit(1);
}
dollars = d;
cents = c;
}
//Function definition of computeTotalAmount
double Money::computeTotalAmount() const
{
//Return given result
return (dollars + cents*0.01);
}
//Function definition of computeTotalDollars
int Money::computeTotalDollars() const
{
//Return given result
return dollars;
}
//Function definition of computeTotalCents
int Money::computeTotalCents() const
{
//Return given result
return cents;
}
//Function definition of forDollarConversion
int Money::forDollarConversion(double amount) const
{
//Return given result
return static_cast<int>(amount);
}
//Function definition of forCentsConversion
int Money::forCentsConversion(double amount) const
{
/* Compute cents from given amount */
double doubleCents = amount * 100;
int ncents = (forRoundedValue(fabs(doubleCents))) % 100;
if (amount < 0)
ncents = -ncents;
return ncents;
}
//Function definition of forRoundedValue
int Money::forRoundedValue(double value) const
{
//Return given result
return floor(value + 0.5);
}
//Function definition for "<<" operator
ostream& operator <<(ostream& outs, const Money& amount)
{
/* Compute dollars and cents using "abs" */
int aDollars = abs(amount.dollars);
int aCents = abs(amount.cents);
//Check condition for cents
if (amount.dollars < 0 || amount.cents < 0)
outs << "$-";
else
outs << '$';
outs << aDollars;
if (aCents >= 10)
outs << '.' << aCents;
else
outs << '.' << '0' << aCents;
return outs;
}
//Function definition for operator '>>'
istream& operator >> (istream& ins, Money& amount)
{
//Declare variables
char dollarSign;
double increaseAmount;
//Read sign of dollars from file
ins >> dollarSign;
/* Check the dollar sign */
if (dollarSign != '$')
{
/* Display message */
cout << "No dollar symbol" << endl;
exit(1);
}
//Read increase amount from file
ins >> increaseAmount;
//Compute dollars for given amount
amount.dollars = amount.forDollarConversion(increaseAmount);
//Compute cents for given amount
amount.cents = amount.forCentsConversion(increaseAmount);
return ins;
}
//Main function
int main()
{
//Create a object for "Money" class
Money amount;
//Create a object for "Money" class with argument
Money purse(100, 10);
//Declare variable for file input
ifstream inStream;
//Declare variable for file output
ofstream outStream;
//Open input file
inStream.open("infile.dat");
/* If the given file is not found, then */
if (inStream.fail())
{
//Display an error message
cout << "Input file opening failed.\n";
//For exit function
exit(1);
}
//Open the output file
outStream.open("outfile.dat");
/* If the output file is not found, then */
if (outStream.fail())
{
//Display an error message
cout << "Output file opening failed.\n";
//For exit function
exit(1);
}
//Read the amount from file
inStream >> amount;
//Display given statement to output file
outStream << amount << " copied from the file infile.dat.\n";
//Display the output
cout << amount << " copied from the file infile.dat.\n";
cout <<"The purse amount is " << purse << endl;
//Call percent function for purse amount
cout << "10% of purse amount: " << purse.percent(10) << endl;
//Compare the given amout and
if (amount == purse)
cout << "The given amount and purse amounts are equal." << endl;
else
cout << "The given amount and purse amounts are not equal." << endl;
//Compute sum of amount and purse
Money totalAmount = amount + purse;
//Display sum of amount
cout << amount << " + " << purse << " = " << totalAmount << endl;
//Compute the difference of two amount
Money diff = amount - purse;
/* Display difference of two amount */
cout << amount << " - " << purse << " = " << diff << endl;
/* Check the amount using the comparison operator ">=" */
if (amount >= purse)
/* Display message */
cout << "The amount is greater than or equal to the purse amount. " << endl;
/* Check the amount using the comparison operator ">" */
if (totalAmount > diff)
/* Display message */
cout << "The sum of amounts is greater than the difference amount. " << endl;
/* Check the amount using the comparison operator "<=" */
if (amount <= purse)
/* Display message */
cout << "The given amount is less than or equal to purse amount. " << endl;
else
/* Display message */
cout << "The given amount is greater than the purse amount. " << endl;
/* Check the amount using the comparison operator "<" */
if (totalAmount < diff)
/* Display message */
cout << "The sum of amounts is less than the difference." << endl;
else
/* Display message */
cout << "The sum of amounts is greater than the difference." << endl;
/* Close input file*/
inStream.close();
/* Close output file */
outStream.close();
}
infile.dat:
$1.11
$2.22
$3.33
$1.11 copied from the file infile.dat.
The purse amount is $100.10
10% of purse amount: $10.01
The given amount and purse amounts are not equal.
$1.11 + $100.10 = $101.21
$1.11 - $100.10 = $-98.99
The sum of amounts is greater than the difference amount.
The given amount is less than or equal to purse amount.
The sum of amounts is greater than the difference.
outfile.dat:
$1.11 copied from the file infile.dat.
Want to see more full solutions like this?
Chapter 11 Solutions
Problem Solving with C++ plus MyProgrammingLab with Pearson eText-- Access Card Package (9th Edition)
Additional Engineering Textbook Solutions
Starting Out with Java: From Control Structures through Objects (7th Edition) (What's New in Computer Science)
Degarmo's Materials And Processes In Manufacturing
SURVEY OF OPERATING SYSTEMS
Starting Out with Python (4th Edition)
Java How to Program, Early Objects (11th Edition) (Deitel: How to Program)
Starting Out With Visual Basic (8th Edition)
- 15 OF 25 QUESTIONS REMAININ Consider the following code. You want to print the array values in the div as an ordered list. What statement would you use to replace the comment in the code below? Two J // what statement goes here? - لبية للالكالا const app = Vue.createApp({ data (( return ( lunch: [ 'Burrito', 'Soup', 'Pizza', 'Rice' }) app.mount ('#app6') - -arrow_forwardPlease answer JAVA OOP problem below: Assume you have three data definition classes, Person, Student and Faculty. The Student and Faculty classes extend Person. Given the code snippet below, in Java, complete the method determinePersonTypeCount to print out how many Student and Faculty objects exist within the Person array. You may assume that each object within the Person[] is either referencing a Student or Faculty object. public static void determinePersonTypeCount(Person[] people){ // Place your code here }arrow_forwardPlease answer JAVA OOP question below: Consider the following relationship diagram between the Game and VideoGame data defintion classes. Game has a constructor that takes in two parameters, title (String) and cost (double). The VideoGame constructor has an additional parameter, genre (String). In Java, efficiently write the constructors needed within the Game class and VideoGame classes. Hint: Remember to think about the appropriate validationarrow_forward
- C++ Programming: From Problem Analysis to Program...Computer ScienceISBN:9781337102087Author:D. S. MalikPublisher:Cengage LearningC++ for Engineers and ScientistsComputer ScienceISBN:9781133187844Author:Bronson, Gary J.Publisher:Course Technology PtrEBK JAVA PROGRAMMINGComputer ScienceISBN:9781337671385Author:FARRELLPublisher:CENGAGE LEARNING - CONSIGNMENT
- Microsoft Visual C#Computer ScienceISBN:9781337102100Author:Joyce, Farrell.Publisher:Cengage Learning,Programming Logic & Design ComprehensiveComputer ScienceISBN:9781337669405Author:FARRELLPublisher:Cengage



