home *** CD-ROM | disk | FTP | other *** search
/ Microsoftware Monthly 19…2 Programming Power Tools / MASO9512.ISO / cpptutor / cpptutor.arj / EXAMPLES / EX0802.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1993-10-14  |  2.5 KB  |  82 lines

  1. // \EXAMPLES\EX0802.CPP
  2. // main program to demonstrate friend of two clases
  3. //---------------------------------------------------------
  4. // files in this example:
  5. // %F,15,EX0802.H%EX0802.H      definition of Fraction class
  6. // EX0802.CPP    this file
  7. //---------------------------------------------------------
  8.  
  9. #include <iostream.h>           // stream I/O
  10. #include <strstrea.h>           // #include <strstream.h>
  11. #include "EX0802.H"             // fraction class
  12.  
  13. //--------------------------------------------------------
  14. // definition of the Vector class
  15. //--------------------------------------------------------
  16. class Vector {
  17.   float v[5];
  18. public:
  19.   Vector();
  20.   friend Vector& mpy(const Fraction& f, Vector& vect);
  21.   void print();
  22. };
  23.  
  24. Vector::Vector()
  25. { for (int i=0; i<5; ++i) v[i] = i+1;
  26. }
  27.  
  28. void Vector::print()
  29. { for (int i=0; i<5; i++)
  30.     cout << "\t" << v[i];
  31. }
  32.  
  33. //---------------------------------------------------------
  34. // declaration of friend functions
  35. //---------------------------------------------------------
  36.  
  37. Vector& mpy(const Fraction& f, Vector& vect);
  38.  
  39. void read(Fraction& f);
  40. //---------------------------------------------------------
  41.  
  42. void main()
  43. {
  44.   Fraction f;
  45.   Vector v;
  46.   cout << "             Vector:";
  47.   v.print();
  48.   cout << endl;
  49.   cout << "Enter a Fracton n/d:    ";
  50.   read(f);
  51.   mpy(f,v);
  52.   cout << "  Vector * Fraction:";
  53.   v.print();
  54.   cout << endl;
  55. }
  56.  
  57. //---------------------------------------------------------
  58. // definition of friend functions
  59. //---------------------------------------------------------
  60.  
  61. Vector& mpy(const Fraction& f, Vector& vect)
  62. { float factor = f.num / float(f.denom);
  63.   for (int i=0; i<5; i++)
  64.     vect.v[i] = vect.v[i] * factor;
  65.   return vect;
  66. }
  67.  
  68. void read(Fraction& f)
  69. {  char c;                            // to hold the '/'
  70.    f.num = 0;                         // default numerator
  71.    f.denom = 1;                       // default denominator
  72.    char buffer[20];                   // for reformatting
  73.    ostrstream oss(buffer,26,ios::out);   // in-memory output
  74.    istrstream iss(buffer,26);            // in-memory input
  75.    char token[20];                    // to hold raw input
  76.    cin >> token;                       // read as  string
  77.    oss << token << "/1" << ends;      // write to memory
  78.    iss >> f.num >> c >> f.denom;      // read int-char-int
  79.    if ( c != '/' ) f.denom = 1;       // check syntax n/d
  80.    f.reduce();                        // simplify fraction
  81. }
  82.