/* ベクトルクラス(普通の足し算) */ #include #include class Vect { public: enum { N = 4 }; private: int p_[N]; public: #ifdef DEBUG Vect() { if (debug) puts("cstr"); } Vect(const Vect& rhs) { puts("copy cstr"); std::copy(rhs.p_, rhs.p_ + N, p_); } Vect& operator=(const Vect& rhs) { if (debug) puts("copy"); std::copy(rhs.p_, rhs.p_ + N, p_); return *this; } #endif int& operator[](int i) { return p_[i]; } int operator[](int i) const { return p_[i]; } friend std::ostream& operator<<(std::ostream& os, const Vect& v) { os << '{'; for (int i = 0; i < N; i++) { os << v.p_[i]; if (i < N - 1) os << ','; } os << '}'; return os; } static void add(const Vect& rhs, const Vect& lhs, Vect& dest) { for (int i = 0; i < N; i++) { dest.p_[i] = rhs.p_[i] + lhs.p_[i]; } } static void add(const Vect& rhs, Vect& dest) { for (int i = 0; i < N; i++) { dest.p_[i] += rhs.p_[i]; } } ///////////////////////////////////////////////////////////// Vect& operator+=(const Vect& rhs) { add(rhs, *this); return *this; } friend Vect operator+(const Vect& lhs, const Vect& rhs) { Vect tmp; add(lhs, rhs, tmp); return tmp; } };