类运算符重载函数operator
下面这段代码块,在类内声明类外定义的时候,会报错operator 此运算符函数的参数太多;这是因为在类内定义的话会默认有一个this指针,因此就超过了两个参数。
class Point
{
public:
int x,y;
Point(int a,int b)
{
x=a;
y=b;
}
Point operator+(Point &p,int num);
}
Point Point::operator+(Point &p,int num)
{
return Point(p.x+num,p.y+num);
}
要解决这个问题,应该把operator函数在类外做为一个全局函数,然后再声明为类Point的友元函数(注意要在返回值前加上const,防止其被修改)
class Point
{
public:
int x,y;
Point(int a,int b)
{
x=a;
y=b;
}
friend Point operator+(const Point &p,int num);
}
//友元函数
Point operator+(const Point &p,int num)
{
Point r=p;
r.x+=num;
r.y+=num;
return r;
}
而如果要把operator在类内声明或者定义,则只可以有一个参数。