c++におけるoperator操作

2122 ワード

  opencv   Point2f          operator  ,            ,       。        ,      ,      ,        ,      ,    。
#include 
using namespace std;

class Point
{
public:
	int x, y;
	Point(){ x = 0; y = 0; }
	Point(int _x, int _y){ x = _x; y = _y; }
	Point & operator - (Point & pt) 
	{
		x = x - pt.x;
		y = y - pt.y;

		return Point(x, y);
	}

	Point & operator + (Point & pt)
	{
		x = x + pt.x;
		y = y + pt.y;

		return Point(x, y);
	}
};

class Demo {
public:
	Demo() {
		a = 1;
		b = 1;
	}

	Demo(int pa, int pb) {
		a = pa;
		b = pb;
	}

	Demo(Point &pt) : a(pt.x), b(pt.y)
	{
		/*a = pt.x;
		b = pt.y;*/
	}

	Demo&  operator + (const Demo& p) {
		Demo demo;
		demo.a = this->a + p.a;
		demo.b = this->b + p.b;
		return demo;
	}

	Demo &operator - (const Demo& p)
	{
		Demo demo;
		demo.a = this->a - p.a;
		demo.b = this->b - p.b;
		return demo;
	}

	Demo &operator *= (const double & s)
	{
		a *=  s;
		b *=  s;
		return Demo(a, b);
	}

	Demo &operator * (const double &s)
	{
		this->a = this->a * s;
		this->b = this->b * s;
		return *this;//Demo(a, b);
	}

	Demo & operator = (const Point &pt)
	{
		return Demo(pt.x, pt.y);
	}

	operator Point() const
	{
		return Demo(a, b);
	}

	void do_something() {
		std::cout << a + b << std::endl;
	}

private:
	int a;
	int b;

};


int main()
{

	Demo d1(2, 6);
	d1.do_something();
	Demo d2(10, 24);
	d2.do_something();
	Demo d3;
	d3 = d1 + d2;
	d3.do_something();
	Demo d4;
	d4 = ((d1 + d2)) * 0.5; //      ,   Demo(Point &pt) : a(pt.x), b(pt.y)       ,    
	d4 =  ((d1 + d2))  ;
	d4 *=  0.5;
	d4.do_something();
	Point p1(20, 10), p2(10, 20);
	Demo d5;
	d5 = Demo((p1 - p2));//        ,   Demo &operator * (const double &s)      ,    
	d5 = Demo(Point(p1 - p2));
	d5.do_something();

	/*Point2f pt0, pt1, pt2;
	pt0 = Point2f(2, 0);
	pt1 = Point2f(5, 0);
	pt2 = Point2f(0, 5);
	XK_RotatedRect rect;

	rect = XK_RotatedRect(pt0, pt1, pt2);
	*/
	return 1;
}

参照先:http://pydoing.blogspot.com/2013/02/cpp-overload-operator.html