home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 October / Chip_2001-10_cd1.bin / chplus / cpp / vektor3.cpp < prev   
C/C++ Source or Header  |  2001-09-12  |  2KB  |  75 lines

  1. ////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  soubor: vektor2.cpp
  4. //  autor: Jaroslav Franek
  5. //  copyright? proc ne: (c) 2001 Jaroslav Franek
  6. //
  7. //  Spratelene funkce
  8. //     reseni 2
  9. //
  10. ////////////////////////////////////////////////////////////////////////////
  11. #pragma hdrstop
  12.  
  13. template <class T> class Vektor;
  14. template <class T> Vektor<T> operator+(const Vektor<T> & v1, const Vektor<T> & v2);
  15.  
  16. //---------------------------------------------------------------------------
  17. template <class T> class Vektor
  18. {
  19.    friend Vektor<T> (::operator +)(const Vektor<T> & v1, const Vektor<T> & v2);
  20.  
  21. public:
  22.    //
  23.    //  ctr & dtr
  24.    //
  25.    Vektor(int s) : size_(s), data_(new T [s]) {}
  26.    Vektor(const Vektor<T> & v);
  27.    ~Vektor() { delete [] data_; }
  28.  
  29.    //
  30.    // iface
  31.    //
  32.    T & operator [](int i) { return data_[i]; }
  33.    T operator [](int i) const { return data_[i]; }
  34.  
  35. private:
  36.    T * data_;
  37.    int size_;  // velikost
  38. };
  39. //---------------------------------------------------------------------------
  40. template <class T>
  41. Vektor<T>::Vektor(const Vektor<T> & v)
  42. : size_(v.size_),
  43.   data_(new T [v.size_])
  44. {
  45.    for ( int i = 0 ; i < size_ ; ++i )
  46.    {
  47.       data_[i] = v.data_[i];
  48.    }
  49. }
  50. //---------------------------------------------------------------------------
  51. template <class T>
  52. Vektor<T> operator +(const Vektor<T> & v1, const Vektor<T> & v2)
  53. {
  54.    // predpokladame, ze v1 a v2 maji stejnou velikost
  55.    Vektor<T> pom(v1.size_);
  56.    for ( int i = 0 ; i < pom.size_ ; ++i )
  57.    {
  58.       pom.data_[i] = v1.data_[i] + v2.data_[i];
  59.    }
  60.    return pom;
  61. }
  62. //---------------------------------------------------------------------------
  63. #pragma argsused
  64. int main(int argc, char* argv[])
  65. {
  66.    Vektor<double> a(2);
  67.    Vektor<double> b(2);
  68.  
  69.    a+b;  // (!)
  70.  
  71.    return 0;
  72. }
  73. //---------------------------------------------------------------------------
  74.  
  75.