|
//money001.cpp // modified 07/17/2000 11:50 AM #include <iostream.h> #include <stdlib.h> #include <time.h> int const MAX_VALUE = 10; int const TEST_COUNT = 20; class CMoney { private: int dollars; int cents; public: CMoney(int dollars=0, int cents=0); CMoney(char ch); ~CMoney(void); void display(void) const; CMoney operator -(); bool operator ==(CMoney amount); bool equal (CMoney amount); bool operator !=(CMoney amount); CMoney operator + (CMoney amount) const; //20% of a project CMoney add (CMoney amount) const; friend CMoney operator * (CMoney amount1, CMoney amount2); friend CMoney multiply (CMoney amount1, CMoney amount2); }; CMoney CMoney::operator -() { this->dollars = -this->dollars; cents = -cents; return *this; } bool CMoney::operator !=(CMoney amount) { //compare object amount with object pointed to by this //return (dollars != amount.dollars || cents != amount.cents); return !(*this == amount); } void testOperatorNotEqual(void) { for (int i=0; i<TEST_COUNT; i++) { cout << "Test #" << i << endl; CMoney m1('r'), m2('r'); cout << "m1 = "; m1.display(); cout << "m2 = "; m2.display(); if (m1 != m2) cout << "m1 is NOT equal to m2\n"; else cout << "m1 is equal to m2\n"; m1 = m2; cout << "After m1 = m2;\n"; cout << "m1 = "; m1.display(); cout << "m2 = "; m2.display(); if (m1 != m2) cout << "m1 is NOT equal to m2\n"; else cout << "m1 is equal to m2\n"; } } bool CMoney::operator ==(CMoney amount) { //compare object amount with object pointed to by this return (dollars == amount.dollars && cents == amount.cents); } void testOperatorEqual(void) { for (int i=0; i<TEST_COUNT; i++) { cout << "Test #" << i << endl; CMoney m1('r'), m2('r'); cout << "m1 = "; m1.display(); cout << "m2 = "; m2.display(); if (m1 == m2) cout << "m1 is equal to m2\n"; else cout << "m1 is NOT equal to m2\n"; m1 = m2; cout << "After m1 = m2;\n"; cout << "m1 = "; m1.display(); cout << "m2 = "; m2.display(); if (m1 == m2) cout << "m1 is equal to m2\n"; else cout << "m1 is NOT equal to m2\n"; } } CMoney operator * (CMoney amount1, CMoney amount2) { CMoney tempAmount; tempAmount.dollars = 999; //dummy tempAmount.cents = 99; //dummy return tempAmount; } void testOperatorMultiply(void) { for (int i=0; i<TEST_COUNT; i++) { cout << "Test #" << i << endl; CMoney m1('r'), m2('r'), m3('r'); cout << "m1 = "; m1.display(); cout << "m2 = "; m2.display(); cout << "m3 = "; m3.display(); m1 = m2 * m3; cout << "After m1 = m2 * m3;\n"; cout << "m1 = "; m1.display(); cout << "m2 = "; m2.display(); cout << "m3 = "; m3.display(); } } CMoney CMoney::operator + (CMoney amount) const { CMoney tempAmount; tempAmount.dollars = this->dollars + amount.dollars; //dummy tempAmount.cents = this->cents + amount.cents; //dummy return tempAmount; } void testOperatorAdd(void) { for (int i=0; i<TEST_COUNT; i++) { cout << "Test #" << i << endl; CMoney m1('r'), m2('r'), m3('r'); cout << "m1 = "; m1.display(); cout << "m2 = "; m2.display(); cout << "m3 = "; m3.display(); m1 = m2 + m3; cout << "After m1 = m2 + m3;\n"; cout << "m1 = "; m1.display(); cout << "m2 = "; m2.display(); cout << "m3 = "; m3.display(); } } CMoney::CMoney(int dollars, int cents) { this->dollars = dollars; this->cents = cents; } void testConstructor(void) { for (int i=0; i<TEST_COUNT; i++) { int dollars = rand()%MAX_VALUE + 1; int cents = rand()%100; if (rand()%2 == 1) { dollars = -dollars; cents = -cents; } CMoney amount(dollars, cents); amount.display(); } } CMoney::CMoney(char ch) { if (('r' == ch) || ('R' == ch)) { dollars = rand()%MAX_VALUE + 1; cents = rand()%100; if (rand()%2 == 1) { dollars = -dollars; cents = -cents; } } else if (('u' == ch) || ('U' == ch)) { dollars = 1; cents = 0; if (rand()%2 == 1) { dollars = -dollars; cents = -cents; } } else if (('p' == ch) || ('P' == ch)) { dollars = 0; cents = 1; if (rand()%2 == 1) { dollars = -dollars; cents = -cents; } } else if (('i' == ch) || ('I' == ch)) { cout << "Enter dollars "; cin >> dollars; cout << "Enter cents "; cin >> cents; } else { dollars = 0; cents = 0; } } void testConstructorRand(void) { for (int i=0; i<TEST_COUNT; i++) { char ch; switch (rand()%6) { case 0: ch = 'r'; break; case 1: ch = 'R'; break; case 2: ch = 'u'; break; case 3: ch = 'U'; break; case 4: ch = 'p'; break; case 5: ch = 'P'; break; case 6: ch = 'i'; break; case 7: ch = 'I'; break; default: ch = 'k'; } CMoney amount(ch); cout << ch << " "; amount.display(); } } void testAssign(void) { for (int i=0; i<TEST_COUNT; i++) { CMoney m1('r'), m2('r'), m3('r'); cout << "m1 = "; m1.display(); cout << "m2 = "; m2.display(); cout << "m3 = "; m3.display(); m1 = m2 = m3; cout << "After m1 = m2 = m3;\n"; cout << "m1 = "; m1.display(); cout << "m2 = "; m2.display(); cout << "m3 = "; m3.display(); } } CMoney::~CMoney(void) { } void CMoney::display(void) const { int tCents = cents; if (tCents < 0) tCents = -tCents; if ((0 == dollars) && (cents < 0)) cout << '-'; cout << dollars << '.'; if (0==tCents) cout << "00" << endl; else if (tCents < 10) cout << '0' << tCents << endl; else cout << tCents << endl; } void main(void) { srand(time(NULL)); //testConstructor(); //testConstructorRand(); //testAssign(); //testOperatorAdd(); //testOperatorMultiply(); //testOperatorEqual(); //testOperatorNotEqual(); CMoney m1('r'), m2('r'); m1.display(); m2.display(); m1 = -m2; m1.display(); m2.display(); } |