### Equality Function

```//DISPLAY 11.1 Equality Function
//Program to demonstrate the function equal.
#include <iostream>
#include <cstdlib>
using namespace std;

class DayOfYear
{
public:
DayOfYear(int the_month, int the_day);
//Precondition: the_month and the_day form a
//possible date. Initializes the date according
//to the arguments.

DayOfYear( );
//Initializes the date to January first.

void input( );

void output( );

int get_month( );
//Returns the month, 1 for January, 2 for February, etc.

int get_day( );
//Returns the day of the month.
private:
void check_date( );
int month;
int day;
};

bool equal(DayOfYear date1, DayOfYear date2);
//Precondition: date1 and date2 have values.
//Returns true if date1 and date2 represent the same date;
//otherwise, returns false.

int main( )
{
DayOfYear today, bach_birthday(3, 21);

cout << "Enter today's date:\n";
today.input( );
cout << "Today's date is ";
today.output( );

cout << "J. S. Bach's birthday is ";
bach_birthday.output( );

if ( equal(today, bach_birthday))
cout << "Happy Birthday Johann Sebastian!\n";
else
cout << "Happy Unbirthday Johann Sebastian!\n";
return 0;
}

bool equal(DayOfYear date1, DayOfYear date2)
{
return ( date1.get_month( ) == date2.get_month( ) &&
date1.get_day( ) == date2.get_day( ) );
}

DayOfYear::DayOfYear()
{
month = 1;
day = 1;
}

DayOfYear::DayOfYear(int the_month, int the_day)
: month(the_month), day(the_day)
{
check_date();
}

void DayOfYear::check_date( )
{
if ((month < 1) || (month > 12) || (day < 1) || (day > 31))
{
cout << "Illegal date. Aborting program.\n";
exit(1);
}
}

int DayOfYear::get_month( )
{
return month;
}

int DayOfYear::get_day( )
{
return day;
}

//Uses iostream:
void DayOfYear::input( )
{
cout << "Enter the month as a number: ";
cin >> month;
cout << "Enter the day of the month: ";
cin >> day;
}

//Uses iostream:
void DayOfYear::output( )
{
cout << "month = " << month
<< ", day = " << day << endl;
}
```

### Money ClassVersion 1

```//DISPLAY 11.3 Money ClassVersion 1
//Program to demonstrate the class Money.
#include <iostream>
#include <cstdlib>
#include <cctype>
using namespace std;

//Class for amounts of money in U.S. currency.
class Money
{
public:
friend Money add(Money amount1, Money amount2);
//Precondition: amount1 and amount2 have been given values.
//Returns the sum of the values of amount1 and amount2.

friend bool equal(Money amount1, Money amount2);
//Precondition: amount1 and amount2 have been given values.
//Returns true if the amount1 and amount2 have the same value;
//otherwise, returns false.

Money(long dollars, int cents);
//Initializes the object so its value represents an amount with the
//dollars and cents given by the arguments. If the amount is negative,
//then both dollars and cents must be negative.

Money(long dollars);
//Initializes the object so its value represents \$dollars.00.

Money( );
//Initializes the object so its value represents \$0.00.
Money ClassVersion 1
double get_value( );
//Precondition: The calling object has been given a value.
//Returns the amount of money recorded in the data of the calling object.

void input(istream& ins);
//Precondition: If ins is a file input stream, then ins has already been
//connected to a file. An amount of money, including a dollar sign, has been
//entered in the input stream ins. Notation for negative amounts is -\$100.00.
//Postcondition: The value of the calling object has been set to
//the amount of money read from the input stream ins.
void output(ostream& outs);
//Precondition: If outs is a file output stream, then outs has already been
//connected to a file.
//Postcondition: A dollar sign and the amount of money recorded
//in the calling object have been sent to the output stream outs.
private:
long all_cents;
};

int digit_to_int(char c);
//Function declaration for function used in the definition of Money::input:
//Precondition: c is one of the digits '0' through '9'.
//Returns the integer for the digit; for example, digit_to_int('3') returns 3.

int main( )
{
Money your_amount, my_amount(10, 9), our_amount;
cout << "Enter an amount of money: ";
your_amount.input(cin);
cout << "Your amount is ";
your_amount.output(cout);
cout << endl;
cout << "My amount is ";
my_amount.output(cout);
cout << endl;

if (equal(your_amount, my_amount))
cout << "We have the same amounts.\n";
else
cout << "One of us is richer.\n";
your_amount.output(cout);
cout << " + ";
my_amount.output(cout);
cout << " equals ";
our_amount.output(cout);
cout << endl;
return 0;
}
{
Money temp;

temp.all_cents = amount1.all_cents + amount2.all_cents;
return temp;
}

bool equal(Money amount1, Money amount2)
{
return (amount1.all_cents == amount2.all_cents);
}

Money::Money(long dollars, int cents)
{
if(dollars*cents < 0) //If one is negative and one is positive

{
cout << "Illegal values for dollars and cents.\n";
exit(1);
}
all_cents = dollars*100 + cents;
}

Money::Money(long dollars) : all_cents(dollars*100)
{
//Body intentionally blank.
}

Money::Money( ) : all_cents(0)
{
//Body intentionally blank.
}

double Money::get_value( )
{
return (all_cents * 0.01);
}
//Uses iostream, cctype, cstdlib:
void Money::input(istream& ins)
{
char one_char, decimal_point,
digit1, digit2; //digits for the amount of cents
long dollars;
int cents;
bool negative;//set to true if input is negative.

ins >> one_char;
if (one_char == '-')
{
negative = true;
}
else
negative = false;
//if input is legal, then one_char == '\$'

ins >> dollars >> decimal_point >> digit1 >> digit2;

if ( one_char != '\$' || decimal_point != '.'
|| !isdigit(digit1) || !isdigit(digit2) )

{
cout << "Error illegal form for money input\n";
exit(1);
}
cents = digit_to_int(digit1)*10 + digit_to_int(digit2);

all_cents = dollars*100 + cents;
if (negative)
all_cents = -all_cents;
}

//Uses cstdlib and iostream:
void Money::output(ostream& outs)
{
long positive_cents, dollars, cents;
positive_cents = labs(all_cents);
dollars = positive_cents/100;
cents = positive_cents%100;

if (all_cents < 0)
outs << "-\$" << dollars << '.';
else
outs << "\$" << dollars << '.';

if (cents < 10)
outs << '0';
outs << cents;
}

int digit_to_int(char c)
{
return (static_cast<int>(c) - static_cast<int>('0') );
}
```

### The Class Money with Constant Parameters

```//DISPLAY 11.4 The Class Money with Constant Parameters
//Class for amounts of money in U.S. currency.
class Money
{
public:
friend Money add(const Money& amount1, const Money& amount2);
//Precondition: amount1 and amount2 have been given values.
//Returns the sum of the values of amount1 and amount2.
friend bool equal(const Money& amount1, const Money& amount2);
//Precondition: amount1 and amount2 have been given values.
//Returns true if amount1 and amount2 have the same value;
//otherwise, returns false.

Money(long dollars, int cents);
//Initializes the object so its value represents an amount with the
//dollars and cents given by the arguments. If the amount is negative,
//then both dollars and cents must be negative.

Money(long dollars);
//Initializes the object so its value represents \$dollars.00.

Money( );
//Initializes the object so its value represents \$0.00.

double get_value( ) const;
//Precondition: The calling object has been given a value.
//Returns the amount of money recorded in the data of the calling object.

void input(istream& ins);
//Precondition: If ins is a file input stream, then ins has already been
//connected to a file. An amount of money, including a dollar sign, has been
//entered in the input stream ins. Notation for negative amounts is -\$100.00.
//Postcondition: The value of the calling object has been set to
//the amount of money read from the input stream ins.

void output(ostream& outs) const;
//Precondition: If outs is a file output stream, then outs has already been
//connected to a file.
//Postcondition: A dollar sign and the amount of money recorded
//in the calling object have been sent to the output stream outs.
private:
long all_cents;
};```

```//DISPLAY 11.5 Overloading Operators
//Program to demonstrate the class Money. (This is an improved version of
//the class Money that we gave in Display 11.3 and rewrote in Display 11.4.)
#include <iostream>
#include <cstdlib>
#include <cctype>
using namespace std;

//Class for amounts of money in U.S. currency.
class Money
{
public:
friend Money operator +(const Money& amount1, const Money& amount2);
//Precondition: amount1 and amount2 have been given values.
//Returns the sum of the values of amount1 and amount2.

friend bool operator ==(const Money& amount1, const Money& amount2);
//Precondition: amount1 and amount2 have been given values.
//Returns true if amount1 and amount2 have the same value;
//otherwise, returns false.

Money(long dollars, int cents);

Money(long dollars);

Money( );

double get_value( ) const;

void input(istream& ins);

void output(ostream& outs) const;
private:
long all_cents;
};

int digit_to_int(char c);

int main( )
{
Money cost(1, 50), tax(0, 15), total;
total = cost + tax;

cout << "cost = ";
cost.output(cout);
cout << endl;

cout << "tax = ";
tax.output(cout);
cout << endl;
cout << "total bill = ";
total.output(cout);
cout << endl;
if (cost == tax)
cout << "Move to another state.\n";
else
cout << "Things seem normal.\n";
return 0;
}

Money operator +(const Money& amount1, const Money& amount2)
{
Money temp;
temp.all_cents = amount1.all_cents + amount2.all_cents;
return temp;
}

bool operator ==(const Money& amount1, const Money& amount2)
{
return (amount1.all_cents == amount2.all_cents);
}

//The definitions of the member functions are the same as in
//in various places so that the function headings match the function
//declarations in the preceding class definition. No other changes
//are needed in the member function definitions. The bodies of the
//member function definitions are identical to those in Display 11.3.

Money::Money(long dollars, int cents)
{
if(dollars*cents < 0) //If one is negative and one is positive

{
cout << "Illegal values for dollars and cents.\n";
exit(1);
}
all_cents = dollars*100 + cents;
}

Money::Money(long dollars) : all_cents(dollars*100)
{
//Body intentionally blank.
}

Money::Money( ) : all_cents(0)
{
//Body intentionally blank.
}

double Money::get_value( ) const
{
return (all_cents * 0.01);
}
//Uses iostream, cctype, cstdlib:
void Money::input(istream& ins)
{
char one_char, decimal_point,
digit1, digit2; //digits for the amount of cents
long dollars;
int cents;
bool negative;//set to true if input is negative.

ins >> one_char;
if (one_char == '-')
{
negative = true;
}
else
negative = false;
//if input is legal, then one_char == '\$'

ins >> dollars >> decimal_point >> digit1 >> digit2;

if ( one_char != '\$' || decimal_point != '.'
|| !isdigit(digit1) || !isdigit(digit2) )

{
cout << "Error illegal form for money input\n";
exit(1);
}
cents = digit_to_int(digit1)*10 + digit_to_int(digit2);

all_cents = dollars*100 + cents;
if (negative)
all_cents = -all_cents;
}

//Uses cstdlib and iostream:
void Money::output(ostream& outs) const
{
long positive_cents, dollars, cents;
positive_cents = labs(all_cents);
dollars = positive_cents/100;
cents = positive_cents%100;

if (all_cents < 0)
outs << "-\$" << dollars << '.';
else
outs << "\$" << dollars << '.';

if (cents < 10)
outs << '0';
outs << cents;
}

int digit_to_int(char c)
{
return (static_cast<int>(c) - static_cast<int>('0') );
}
```

```//DISPLAY 11.8 Overloading << and >>
//Program to demonstrate the class Money.
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cctype>
using namespace std;

//Class for amounts of money in U.S. currency.
class Money
{
public:
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);

friend bool operator < (const Money& amount1, const Money& amount2);
//Returns true if amount1 is less than amount2; false otherwise.

Money(long dollars, int cents);

Money(long dollars);

Money( );

double get_value( ) 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:
long all_cents;
};
int digit_to_int(char c);
//Used in the definition of the overloaded input operator >>.
//Precondition: c is one of the digits '0' through '9'.
//Returns the integer for the digit; for example, digit_to_int('3') returns 3.

int main( )
{
Money amount1, amount2;

cout << "input first amount:";
cin >> amount1;
cout << "input second amount:";
cin >> amount2;

cout << "You entered " << amount1 << " and " << amount2 << endl;
cout << "Negated " << -amount1 << " and " << -amount2 << endl;
cout << "Sum " << amount1 + amount2 << endl;
cout << "Difference " << amount1 - amount2 << endl;

if (amount1 < amount2) {
cout << amount1 << " < " << amount2;
} else if (amount2 < amount1) {
cout << amount1 << " > " << amount2;
} else {
cout << amount1 << " = " << amount2;
}
cout << endl;

return 0;
}

Money operator +(const Money& amount1, const Money& amount2)
{
Money temp;
temp.all_cents = amount1.all_cents + amount2.all_cents;
return temp;
}

bool operator ==(const Money& amount1, const Money& amount2)
{
return (amount1.all_cents == amount2.all_cents);
}

Money operator -(const Money& amount1, const Money& amount2)
{
Money temp;
temp.all_cents = amount1.all_cents - amount2.all_cents;
return temp;
}

Money operator -(const Money& amount)
{
Money temp;
temp.all_cents = -amount.all_cents;
return temp;
}

bool operator < (const Money& amount1, const Money& amount2){
return amount1.all_cents < amount2.all_cents;
}

//Uses iostream, cctype, cstdlib:
istream& operator >>(istream& ins, Money& amount)
{
char one_char, decimal_point,
digit1, digit2; //digits for the amount of cents
long dollars;
int cents;
bool negative;//set to true if input is negative.

ins >> one_char;
if (one_char == '-')
{
negative = true;
}
else
negative = false;
//if input is legal, then one_char == '\$'

ins >> dollars >> decimal_point >> digit1 >> digit2;

if ( one_char != '\$' || decimal_point != '.'
|| !isdigit(digit1) || !isdigit(digit2) )
{
cout << "Error illegal form for money input\n";
exit(1);
}

cents = digit_to_int(digit1)*10 + digit_to_int(digit2);

amount.all_cents = dollars*100 + cents;
if (negative)
amount.all_cents = -amount.all_cents;

return ins;
}

int digit_to_int(char c)
{
return ( static_cast<int>(c) - static_cast<int>('0') );
}

//Uses cstdlib and iostream:
ostream& operator <<(ostream& outs, const Money& amount)
{
long positive_cents, dollars, cents;
positive_cents = labs(amount.all_cents);
dollars = positive_cents/100;
cents = positive_cents%100;

if (amount.all_cents < 0)
outs << "-\$" << dollars << '.';
else
outs << "\$" << dollars << '.';

if (cents < 10)
outs << '0';
outs << cents;

return outs;
}

Money::Money(long dollars, int cents)
{
if(dollars*cents < 0) //If one is negative and one is positive

{
cout << "Illegal values for dollars and cents.\n";
exit(1);
}
all_cents = dollars*100 + cents;
}

Money::Money(long dollars) : all_cents(dollars*100)
{
//Body intentionally blank.
}

Money::Money( ) : all_cents(0)
{
//Body intentionally blank.
}
```

### Program for a Class with an Array Member

```//DISPLAY 11.10 Program for a Class with an Array Member
//This is the definition for a class TemperatureList.
//Values of this type are lists of Fahrenheit temperatures.

#include <iostream>
#include <cstdlib>
using namespace std;

const int MAX_LIST_SIZE = 50;

class TemperatureList
{
public:
TemperatureList( );
//Initializes the object to an empty list.

//Precondition: The list is not full.
//Postcondition: The temperature has been added to the list.

bool full( ) const;
//Returns true if the list is full; false otherwise.

friend ostream& operator <<(ostream& outs,
const TemperatureList& the_object);
//Overloads the << operator so it can be used to output values of
//type TemperatureList. Temperatures are output one per line.
//Precondition: If outs is a file output stream, then outs
//has already been connected to a file.

private:
double list[MAX_LIST_SIZE]; //of temperatures in Fahrenheit
int size; //number of array positions filled
};

int  main()
{
TemperatureList temps;

cout << "Enter Temperatures, temperature less then -500.0 when done." << endl;
double temp = 0;
do
{
cout << "Next Temp: ";
cin >> temp;
if (temp > -500.0)
{
}

}
while (!temps.full() && temp > -500.0);

cout << "You entered:" << temps;
}

//This is the implementation for the class TemperatureList.

TemperatureList::TemperatureList( ) : size(0)
{
//Body intentionally empty.
}

{
//Uses iostream and cstdlib:
if ( full( ) )
{
cout << "Error: adding to a full list.\n";
exit(1);
}
else
{
list[size] = temperature;
size = size + 1;
}
}
bool TemperatureList::full( ) const
{
return (size == MAX_LIST_SIZE);
}
//Uses iostream:
ostream& operator <<(ostream& outs, const TemperatureList& the_object)
{
for (int i = 0; i < the_object.size; i++)
outs << the_object.list[i] << " F\n";
return outs;
}
```

Topic revision: r1 - 2015-12-01 - JimSkon    Copyright © 2008-2019 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback