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++ (10th Edition)
Additional Engineering Textbook Solutions
Programming in C
C Programming Language
C++ How to Program (10th Edition)
Web Development and Design Foundations with HTML5 (9th Edition) (What's New in Computer Science)
Starting Out with Java: From Control Structures through Data Structures (3rd Edition)
Introduction to Java Programming and Data Structures, Comprehensive Version (11th Edition)
- Write a class ‘Box’ which has three members height, width and depth; To set values and use these members, write mutator and accessor functions for these members. (Hint: there would be 3 Accessor and 3 Mutator functions).arrow_forwardTo overload the pre-increment operator for a class as a member function, how many arguments are required? b.When overloading the pre-increment operator for a class as a friend function, how many arguments are required?arrow_forwardc++ exercise: 1- Implement the class “cylinder” with member variables radius and height, whichare private of type double. Define the global constant PI=3.1415 and use it incalculating the volume of the cylinder (PI*radius*radius*height).Implement in the class cylinder the following functions:a- A default constructor with default values of one.b- One constructor with two arguments. This constructor should check that thevariable is positive and does not exceed 20, otherwise the variable will beassigned its default value of one.c- A reader for each variable.d- A writer for each variable.e- A reader and a writer for diameter.f- A member function “volume” which calculates the volume of a cylinder.g- A member function “print” which prints the radius, diameter, and height of acylinder.h- A member function display_name() which displays “cylinderarrow_forward
- (After reading the instructions given in the pictures attached, read the following) Class membersdoctorType Class must contain at least these functionsdoctorType(string first, string last, string spl); //First Name, Last Name, Specialty void print() const; //Formatted Display First Name, Last Name, Specialtyvoid setSpeciality(string); //Set the doctor’s Specialtystring getSpeciality(); //Return the doctor’s SpecialtypatientType Class must contain at least these functionsvoid setInfo(string id, string fName, string lName,int bDay, int bMth, int bYear,string docFrName, string docLaName, string docSpl,int admDay, int admMth, int admYear,int disChDay, int disChMth, int disChYear);void setID(string);string getID();void setBirthDate(int dy, int mo, int yr);int getBirthDay();int getBirthMonth();int getBirthYear();void setDoctorName(string fName, string lName);void setDoctorSpl(string);string getDoctorFName();string getDoctorLName();string getDoctorSpl();void…arrow_forwardWrite a class Travel having two private data members (distanceCovered , Time) The class has three constructors which are • having no parameter – for setting values to zero or null. • having two parameters for assigning values to both data members. • Overload the above constructor and use this keyword to set the values of data members. • Provide getters/setters for data members. • A function which calculates and display speed of traveling. • Write a function show() displays values. Write test Application that demonstrates the Run class by calling all the three constructors and method, creating a Create Travel objects, and then display the traveling with speed. Calculate highest speed. Programming language : javaarrow_forwardcan someone help me with this problem in C++ In this exercise, you will work with 3 classes: Shape, Triangle and Rectangle. The first class is the class Shape. The Shape class has two float type properties: center_x and center_y. The Shape class also has the following methods: a constructor Shape(), that will set center_x and center_y to zero. set/get functions for the two attributes 1) You need to implement two additional functions for Shape: setCenter(float x, float y), that will set the new center and print: Figure moved to [<center_x>, <center_y>] draw(), that will print: Drawing Figure at [<center_x>, <center_y>] 2) You will have to implement another class, called Triangle, which inherits from the Shape class. The Triangle class has one int attribute: side. The Triangle class has the following methods: a constructor that will receive one int parameters (side) set/get for its attribute setCenter(float x, float y), that will set the new center and…arrow_forward
- Two base classes have functions with the same name, while a class derived from both base classes has no function with this name. How do objects of the derived class access the correct base class function? Write your own program to explain the answer.arrow_forwarda. How many parameters are required to overload the pre-increment operator for a class as a member function? b. How many parameters are required to overload the post-increment operator for a class as a friend function?arrow_forward- Implement the class “cylinder” with member variables radius and height, whichare private of type double. Define the global constant PI=3.1415 and use it incalculating the volume of the cylinder (PI*radius*radius*height).Implement in the class cylinder the following functions:a- A default constructor with default values of one.b- One constructor with two arguments. This constructor should check that thevariable is positive and does not exceed 20, otherwise the variable will beassigned its default value of one.c- A reader for each variable.d- A writer for each variable.e- A reader and a writer for diameter.f- A member function “volume” which calculates the volume of a cylinder.g- A member function “print” which prints the radius, diameter, and height of acylinder.h- A member function display_name() which displays “cylinder”.2- Write a program which declares an array of n cylinders (use n=5). Initialize thearray values by writing a loop which asks the user to input the radius and…arrow_forward
- Please read the main function and define a class CStudent. (object array, static member, string) Please do not change the main function and complete the program given. 【Description】 Please read the main function and define a class CStudent. In the main funciton, two arrays of the ojbect of CStudent are define. Please analyze the call of constructor and destructor in the process of creating and releasing objects. 1. CStudent has two private member variables:stirng name, int age. 2. CStudent has a static member count. It will be incremented by 1 when the object is created and decremented by 1 when the object is destroyed. 3. The constructor function should output "*** is contructing". The destructor function should output “*** is destructing”. "***" indicates the name of the current CStudent object. 【Input】 No input 【Output sample】 There are 0 students. noname is contructing noname is contructing noname is contructing noname is contructing noname is contructing name:noname…arrow_forwardGiven the Class Definition for ClockType discussed extensively in class, write what would have to be added to the FUNCTION DEFINITION for the Class ClockType to overload the “= =”, i.e., the comparison “equal-equal sign,” here: NOTE: In other words, WHAT WOULD BE ADDED TO THE CLASS DEFINITION ONLY? Note: ThePrivate Members are: int hr; // contains the hours int min; // contains the minutes int sec; // contains the secondsarrow_forwardC++ please! Please type it and no pictures. Create a class called Employee that includes three data members: a firstname (type string), a last name (type string), and monthly salary (type int).The class will have a constructor that initializes the three data members.Include the set and get member functions for each data member. If the monthlysalary is not positive, the set function will set it to 0. Also include amember function that returns the yearly salary (i.e. twelve times the monthlysalary).Write a test program that prompts the user to enter the first and lastname of an employee as well as their monthly salary. The program will thenoutput the yearly salary of the employee, give them a 10 percent raise, andoutput the yearly salary again.arrow_forward
- C++ Programming: From Problem Analysis to Program...Computer ScienceISBN:9781337102087Author:D. S. MalikPublisher:Cengage Learning