// nvector.h #ifndef nvector_H #define nvector_H #undef trf_info #define trf_error #include "array.h" template class nvector : public array { private: int _length; void ostr(std::ostream& stream) const; public: explicit nvector(int N ) : array(N) { _length = N; }; virtual ~nvector(void) { }; nvector &operator=(const nvector& vec); nvector(const nvector& vec); int length() const { return _length; }; nvector& operator+=(const nvector& vec); nvector& operator-=(const nvector& vec); nvector& operator*=(const T& tval); #if defined(DEFECT_GUIDING_DECLS) friend nvector operator+(const nvector& vec1,const nvector& vec2); friend nvector operator-(const nvector& vec1,const nvector& vec2); #elif defined(DEFECT_NO_EXPLICIT_QUALIFICATION) template friend nvector operator+(const nvector& vec1,const nvector& vec2); template friend nvector operator-(const nvector& vec1,const nvector& vec2); #else friend nvector operator+ <> (const nvector& vec1,const nvector& vec2); friend nvector operator- <> (const nvector& vec1,const nvector& vec2); #endif }; // copy template inline nvector::nvector(const nvector& vec) : array( vec ) { #ifdef trf_info std::cout << "copying a vector\n"; #endif _length = vec._length; } // assignment template inline nvector &nvector::operator=(const nvector& vec) { #ifdef trf_info std::cout << "assigning a vector\n"; #endif (array&)*this = vec; return *this; } template inline nvector &nvector::operator+=(const nvector& vec) { (array&)*this += vec; return *this; } template inline nvector &nvector::operator-=(const nvector& vec) { (array&)*this -= vec; return *this; } template inline nvector &nvector::operator*=(const T& tval) { (array&)*this *= tval; return *this; } template inline nvector operator*(const T& val,const nvector& vec) { nvector lhs = vec; lhs *= val; return lhs; } template inline nvector operator*(const nvector& vec,const T& val) { nvector lhs = vec; lhs *= val; return lhs; } template inline nvector operator+(const nvector& vec1,const nvector& vec2) { nvector sum = vec1; sum += vec2; return sum; } #ifndef __xlC__ #include "nvector.c" #endif #endif