|
//File: rect03.cpp //Date: 02/08/2002 //Authors: Us //////////////////////////////////////////////////////////// //Problem: define rectangle type and some operations for it //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// // includes //////////////////////////////////////////////////////////// #include <iostream.h> #include <stdlib.h> #include <time.h> //////////////////////////////////////////////////////////// // type TRectangle definition //////////////////////////////////////////////////////////// const int TEST_COUNT = 5; //////////////////////////////////////////////////////////// // type TRectangle definition //////////////////////////////////////////////////////////// struct TRectangle { int length; int width; }; //////////////////////////////////////////////////////////// // prototype //////////////////////////////////////////////////////////// void init(TRectangle &rec, const int a, const int b); void init(TRectangle &rec, const char ch); void display(const TRectangle &rec); bool areEqual(const TRectangle &rec1, const TRectangle &rec2); bool operator == (const TRectangle &rec1, const TRectangle &rec2); bool operator != (const TRectangle &rec1, const TRectangle &rec2); ostream & operator << (ostream &bob, const TRectangle &rec); //////////////////////////////////////////////////////////// // prototype test functions //////////////////////////////////////////////////////////// void testInit1(void); void testInit2(void); void testOperatorEqual(void); void testOperatorNotEqual(void); //////////////////////////////////////////////////////////// // main //////////////////////////////////////////////////////////// void main(void) { srand(time(NULL)); testInit1(); testInit2(); testOperatorEqual(); testOperatorNotEqual(); } //////////////////////////////////////////////////////////// // init //////////////////////////////////////////////////////////// void init(TRectangle &rec, const int a, const int b) { if (a < 0) rec.length = -a; else rec.length = a; if (b < 0) rec.width = -b; else rec.width = b; if (0 == a) rec.length = 1; if (0 == b) rec.width = 1; } /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ // testInit1 /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ void testInit1(void) { cout << "init(TRectangle &rec, const int a, const int b)\n"; cout << "===============================================\n"; for (int i=1; i<=TEST_COUNT; i++) { TRectangle r1; int a = -10 + rand()%21; int b = -10 + rand()%21; cout << "a= " << a << ", b= " << b << endl; cout << "Before init(r1, a, b);\n"; cout <<r1; init(r1, a, b); cout << "After init(r1, a, b);\n"; cout << r1; TRectangle *p1; p1 = new TRectangle; cout << "Before init(*p1, a, b);\n"; cout << *p1; init(*p1, a, b); cout << "Before init(*p1, a, b);\n"; cout << *p1; delete p1; cout << "-----------------------\n"; } } //////////////////////////////////////////////////////////// // init //////////////////////////////////////////////////////////// void init(TRectangle &rec, const char ch) { if (('r' == ch) || ('R' == ch)) { rec.length = 1 + rand()%10; rec.width = 1 + rand()%10; } else { rec.length = 1; rec.width = 1; } } /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ // testInit2 /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ void testInit2(void) { cout << "init(TRectangle &rec, const char ch)\n"; cout << "====================================\n"; for (int i=1; i<=TEST_COUNT; i++) { TRectangle r1; char ch; char characters[] = {'r', 'R', 'x'}; int a = rand()%3; ch = characters[a]; cout << "ch= " << ch << endl; cout << "Before init(r1, ch);\n"; cout <<r1; init(r1, ch); cout << "After init(r1, ch);\n"; cout << r1; TRectangle *p1; p1 = new TRectangle; cout << "Before init(*p1, ch);\n"; cout << *p1; init(*p1, ch); cout << "After init(*p1, ch);\n"; cout << *p1; delete p1; cout << "-----------------------\n"; } } //////////////////////////////////////////////////////////// // display //////////////////////////////////////////////////////////// void display(const TRectangle &rec) { cout << "rect(" << rec.length << ", " << rec.width << ')' << endl; } //////////////////////////////////////////////////////////// // areEqual //////////////////////////////////////////////////////////// bool areEqual(const TRectangle &rec1, const TRectangle &rec2) { return (rec1.length == rec2.length) && (rec1.width == rec2.width); } //////////////////////////////////////////////////////////// // operator == //////////////////////////////////////////////////////////// bool operator == (const TRectangle &rec1, const TRectangle &rec2) { return (rec1.length == rec2.length) && (rec1.width == rec2.width); } /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ // testOperatorEqual /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ void testOperatorEqual(void) { cout << "bool operator == (rec1, rec2)\n"; cout << "=============================\n"; for (int i=1; i<=TEST_COUNT; i++) { TRectangle r1, r2; init(r1, 'r'); init(r2, 'r'); cout << "Initially\n"; cout << "r1=" << r1; cout << "r2=" << r2; if (r1 == r2) cout << "Are Equal\n"; else cout << "Not Equal\n"; r1 = r2; cout << "After r1 = r2;\n"; cout << "r1=" << r1; cout << "r2=" << r2; if (r1 == r2) cout << "Are Equal\n"; else cout << "Not Equal\n"; cout << "-----------------------\n"; } } //////////////////////////////////////////////////////////// // operator != //////////////////////////////////////////////////////////// bool operator != (const TRectangle &rec1, const TRectangle &rec2) { return !(rec1 == rec2); } /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ // testOperatorNotEqual /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ void testOperatorNotEqual(void) { cout << "bool operator != (rec1, rec2)\n"; cout << "=============================\n"; for (int i=1; i<=TEST_COUNT; i++) { TRectangle r1, r2; init(r1, 'r'); init(r2, 'r'); cout << "Initially\n"; cout << "r1=" << r1; cout << "r2=" << r2; if (r1 != r2) cout << "Not Equal\n"; else cout << "Are Equal\n"; r1 = r2; cout << "After r1 = r2;\n"; cout << "r1=" << r1; cout << "r2=" << r2; if (r1 != r2) cout << "Not Equal\n"; else cout << "Are Equal\n"; cout << "-----------------------\n"; } } //////////////////////////////////////////////////////////// // operator << for output //////////////////////////////////////////////////////////// ostream & operator << (ostream &bob, const TRectangle &rec) { bob << "rect(" << rec.length << ", " << rec.width << ')' << endl; return bob; } /**********************************************************/ // SAMPLE OUTPUT /**********************************************************/ /* init(TRectangle &rec, const int a, const int b) =============================================== a= -2, b= 8 Before init(r1, a, b); rect(-858993460, -858993460) After init(r1, a, b); rect(2, 8) Before init(*p1, a, b); rect(-842150451, -842150451) Before init(*p1, a, b); rect(2, 8) ----------------------- a= 8, b= -5 Before init(r1, a, b); rect(2, 8) After init(r1, a, b); rect(8, 5) Before init(*p1, a, b); rect(-842150451, -842150451) Before init(*p1, a, b); rect(8, 5) ----------------------- a= 7, b= 8 Before init(r1, a, b); rect(8, 5) After init(r1, a, b); rect(7, 8) Before init(*p1, a, b); rect(-842150451, -842150451) Before init(*p1, a, b); rect(7, 8) ----------------------- a= -9, b= 8 Before init(r1, a, b); rect(7, 8) After init(r1, a, b); rect(9, 8) Before init(*p1, a, b); rect(-842150451, -842150451) Before init(*p1, a, b); rect(9, 8) ----------------------- a= 4, b= -1 Before init(r1, a, b); rect(9, 8) After init(r1, a, b); rect(4, 1) Before init(*p1, a, b); rect(-842150451, -842150451) Before init(*p1, a, b); rect(4, 1) ----------------------- init(TRectangle &rec, const char ch) ==================================== ch= R Before init(r1, ch); rect(-858993460, -858993460) After init(r1, ch); rect(1, 4) Before init(*p1, ch); rect(-842150451, -842150451) After init(*p1, ch); rect(10, 5) ----------------------- ch= x Before init(r1, ch); rect(1, 4) After init(r1, ch); rect(1, 1) Before init(*p1, ch); rect(-842150451, -842150451) After init(*p1, ch); rect(1, 1) ----------------------- ch= r Before init(r1, ch); rect(1, 1) After init(r1, ch); rect(5, 5) Before init(*p1, ch); rect(-842150451, -842150451) After init(*p1, ch); rect(9, 1) ----------------------- ch= x Before init(r1, ch); rect(5, 5) After init(r1, ch); rect(1, 1) Before init(*p1, ch); rect(-842150451, -842150451) After init(*p1, ch); rect(1, 1) ----------------------- ch= x Before init(r1, ch); rect(1, 1) After init(r1, ch); rect(1, 1) Before init(*p1, ch); rect(-842150451, -842150451) After init(*p1, ch); rect(1, 1) ----------------------- bool operator == (rec1, rec2) ============================= Initially r1=rect(6, 3) r2=rect(9, 1) Not Equal After r1 = r2; r1=rect(9, 1) r2=rect(9, 1) Are Equal ----------------------- Initially r1=rect(10, 2) r2=rect(4, 9) Not Equal After r1 = r2; r1=rect(4, 9) r2=rect(4, 9) Are Equal ----------------------- Initially r1=rect(8, 9) r2=rect(10, 6) Not Equal After r1 = r2; r1=rect(10, 6) r2=rect(10, 6) Are Equal ----------------------- Initially r1=rect(5, 4) r2=rect(9, 8) Not Equal After r1 = r2; r1=rect(9, 8) r2=rect(9, 8) Are Equal ----------------------- Initially r1=rect(4, 8) r2=rect(10, 5) Not Equal After r1 = r2; r1=rect(10, 5) r2=rect(10, 5) Are Equal ----------------------- bool operator != (rec1, rec2) ============================= Initially r1=rect(8, 9) r2=rect(7, 6) Not Equal After r1 = r2; r1=rect(7, 6) r2=rect(7, 6) Are Equal ----------------------- Initially r1=rect(7, 6) r2=rect(3, 10) Not Equal After r1 = r2; r1=rect(3, 10) r2=rect(3, 10) Are Equal ----------------------- Initially r1=rect(8, 2) r2=rect(6, 4) Not Equal After r1 = r2; r1=rect(6, 4) r2=rect(6, 4) Are Equal ----------------------- Initially r1=rect(6, 5) r2=rect(6, 7) Not Equal After r1 = r2; r1=rect(6, 7) r2=rect(6, 7) Are Equal ----------------------- Initially r1=rect(6, 8) r2=rect(2, 4) Not Equal After r1 = r2; r1=rect(2, 4) r2=rect(2, 4) Are Equal ----------------------- Press any key to continue */ |