我想在3个对象之间使用-
运算符,但是我不能。
错误:'A A::operator-(A, A)'必须接受零或一个参数
我不知道该怎么办。
class A
{
private:
float x,y;
public:
void set(int a,int b){
x=a;
y=b;
}
void show(){
cout<<"x = "<<x<<" y = "<<y<<endl;
}
A() {}
A operator -(A &obj1){
A temp;
temp.x= x - obj1.x;
temp.y= y - obj1.y;
return temp;
}
};
A A::operator -(A obj1, A obj2);
int main() {
A ob1,ob2,ob,result;
ob1.set(5,7);
ob2.set(10,7);
ob.set(4,9);
result = ob - ob2 -ob1;
ob.show();
return 0;
}
有两种方法重载类的操作符:
class Foo {
public:
Foo operator -(const Foo &rhs) const { ... }
Foo operator +(const Foo &rhs) const;
};
Foo Foo::operator +(const Foo &rhs) const {
...
}
或
class Foo { ... };
Foo operator -(const Foo &lhs, const Foo &rhs) { ... }
第一个是在类内部将操作符重载为类的函数。它this
操作员的左手边,这样你就可以只指定右边作为论点。
第二个重载类外部的通用操作符。它有两个参数,左边和右边。它不是类的成员,不能访问私有部分,除非你把它加为好友。
你把这两种风格混在一起了,这就是错误想告诉你的。
你不需要实现任何东西来使a - b - c
工作,因为编译器会将其转换为temp = a - b; temp - c;
。