home *** CD-ROM | disk | FTP | other *** search
- // \EXAMPLES\EX0802.CPP
- // main program to demonstrate friend of two clases
- //---------------------------------------------------------
- // files in this example:
- // %F,15,EX0802.H%EX0802.H definition of Fraction class
- // EX0802.CPP this file
- //---------------------------------------------------------
-
- #include <iostream.h> // stream I/O
- #include <strstrea.h> // #include <strstream.h>
- #include "EX0802.H" // fraction class
-
- //--------------------------------------------------------
- // definition of the Vector class
- //--------------------------------------------------------
- class Vector {
- float v[5];
- public:
- Vector();
- friend Vector& mpy(const Fraction& f, Vector& vect);
- void print();
- };
-
- Vector::Vector()
- { for (int i=0; i<5; ++i) v[i] = i+1;
- }
-
- void Vector::print()
- { for (int i=0; i<5; i++)
- cout << "\t" << v[i];
- }
-
- //---------------------------------------------------------
- // declaration of friend functions
- //---------------------------------------------------------
-
- Vector& mpy(const Fraction& f, Vector& vect);
-
- void read(Fraction& f);
- //---------------------------------------------------------
-
- void main()
- {
- Fraction f;
- Vector v;
- cout << " Vector:";
- v.print();
- cout << endl;
- cout << "Enter a Fracton n/d: ";
- read(f);
- mpy(f,v);
- cout << " Vector * Fraction:";
- v.print();
- cout << endl;
- }
-
- //---------------------------------------------------------
- // definition of friend functions
- //---------------------------------------------------------
-
- Vector& mpy(const Fraction& f, Vector& vect)
- { float factor = f.num / float(f.denom);
- for (int i=0; i<5; i++)
- vect.v[i] = vect.v[i] * factor;
- return vect;
- }
-
- void read(Fraction& f)
- { char c; // to hold the '/'
- f.num = 0; // default numerator
- f.denom = 1; // default denominator
- char buffer[20]; // for reformatting
- ostrstream oss(buffer,26,ios::out); // in-memory output
- istrstream iss(buffer,26); // in-memory input
- char token[20]; // to hold raw input
- cin >> token; // read as string
- oss << token << "/1" << ends; // write to memory
- iss >> f.num >> c >> f.denom; // read int-char-int
- if ( c != '/' ) f.denom = 1; // check syntax n/d
- f.reduce(); // simplify fraction
- }