演算子多重定義

zxc
記事: 79
登録日時: 13年前
住所: 日本の背骨(?)あたり

演算子多重定義

投稿記事 by zxc » 12年前

  演算子オーバーロード
C_point_1D型とint,double,またはC_point_1D型の加減と代入のつもり
C_opint_1Dは一次元

CODE:

class C_point_1D{
	private:
		double x;
	
	public:
		C_point_1D(double = 0);
		virtual ~C_point_1D(){}

		void set(const double = 0 );
		double tell()const;
		
		C_point_1D operator+(const C_point_1D& p);
		C_point_1D operator+(const double& p);
		C_point_1D operator+(const int& p);

		C_point_1D operator-(const C_point_1D& p);
		C_point_1D operator-(const double& p);
		C_point_1D operator-(const int& p);

		C_point_1D operator=(const C_point_1D& p);
		C_point_1D operator=(const double& p);
		C_point_1D operator=(const int& p);

};
  そして2次元平面上の点C_point_2D
本当はC_point_1D型のxyをprivateにして、その関数もこのクラスの関数のようにすべきかもしれない。今回は面倒なのと新たに関数を定義するメリットがほとんどないと思ったのでしていない。

CODE:

class C_point_2D{
	private:
	public:
		C_point_2D(const double,const double);
		C_point_1D x,y;

		C_point_2D operator+(const C_point_2D& p);
		C_point_2D operator-(const C_point_2D& p);
		C_point_2D operator=(const C_point_2D& p);
		void operator()(const double = 0,const double = 0);
};
そして最後に今までの二次元平面C_point

CODE:

class C_point{
	private:
		double x;
		double y;
	
	public:
		C_point(double = 0,double = 0);
		virtual ~C_point(){}

		void set_x(const double = 0 );
		void set_y(const double = 0 );
		void add_x(const double );
		void add_y(const double );
	

		double tell_x()const;
		double tell_y()const;

		C_point operator+(const C_point& p);
		C_point operator-(const C_point& p);
		C_point operator=(const C_point& p);

		void operator()(const double = 0,const double = 0);
};

  まだしっかりテストしたわけではないが一応動くようだ。直感的な演算子は魅力的だが、クラスのサイズが大きくなるだろうし、ほかのクラスでも使いたいだろう。ほかのクラスの演算子と混ざってしまうと厄介そうである。う~ん。
  とりあえず、二次元平面のどちらかを使いたいがどちらを使うか・・・  最後のものはx+n,y+nと書けない上、2つの似た要素(xとy)を別々に扱うからどうなんだろうとは思う。最初のものは使えば楽でもその実装を見て、今後自分は混乱しないのか、演算子同士衝突しないか・・・  とりあえず後者でいきますか。

コメントはまだありません。