以一个Point类为例,重载几个运算符,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 class Point { public : Point (int x=0 ,int y=0 ) { arr[0 ] = x; arr[1 ] = y; } void print () { cout<<"x: " <<arr[0 ]<<" y: " <<arr[1 ]<<endl; } int & operator [](int num) { assert (num==1 || num==0 ); if (num==0 ) return arr[0 ]; else if (num==1 ) return arr[1 ]; } Point& operator -() { return Point (-arr[0 ],-arr[1 ]); } Point& operator --() { return Point (arr[0 ]-1 ,arr[1 ]-1 ); } Point& operator ++() { return Point (arr[0 ]+1 ,arr[1 ]+1 ); } Point& operator +(Point& p) { return Point (arr[0 ]+p.arr[0 ], arr[1 ]+p.arr[1 ]); } Point& operator -(Point& p) { return Point (arr[0 ] - p.arr[0 ], arr[1 ] - p.arr[1 ]); } bool operator ==(const Point& p) { return ((arr[0 ]==p.arr[0 ]) && (arr[1 ]==p.arr[1 ]) ) } private : int arr[2 ]; };
有一个数组做成员变量,构造函数给数组赋值。
首先是一元运算符
-
--
++
,显然是无参数的。返回值应当是
Point&
,函数也容易理解。
二元运算符加法和减法及相等也简单,有一个参数而已。其实这三个运算符由于是双目的,最好按友元重载。
下标运算符重载的声明必须是返回类型& operator [](参数)
,只能作为类成员函数,不能做友元。
调用:
1 2 3 4 5 6 7 8 9 10 11 12 13 Point p (1 ,4 ) ;p[0 ] = 7 ; p[1 ] = 9 ; Point p1 = -p; Point p2 (4 ,12 ) ;Point p3 = p - p2; if (p2==p3) cout<<"equal" <<endl; else cout<<"not equal" <<endl; Point p4 = ++p3; Point p5 = --p3;
参考:
C++ 运算符重载