在 C++ 中,如何区分一元和二元减号运算符的运算符重载函数?
我正在尝试使用以下代码重载两者:
Vector Vector::operator-(){
return Vector(-x,-y,-z);
}
Vector Vector::operator-(const Vector& v){
return this* + (-v);
}
但这会产生很多错误:
vector.cpp: In member function ‘Vector Vector::operator-(const Vector&)’:
vector.cpp:88:20: error: passing ‘const Vector’ as ‘this’ argument of ‘Vector Vector::operator-()’ discards qualifiers [-fpermissive]
return this* + (-v);
^
vector.cpp:88:16: error: no match for ‘operator+’ (operand type is ‘Vector’)
return this* + (-v);
^
vector.cpp:88:16: note: candidates are:
vector.cpp:70:8: note: Vector Vector::operator+(const Vector&)
Vector Vector::operator+(const Vector& v){
^
...
我该如何解决这个问题?
最佳答案
1. v
是通过引用传递给const的,它不能被非常量成员函数调用。由于 operator-
和 operator+
(一元和二进制版本)不会修改类的成员,因此您应该将它们设为 const 成员函数。
Vector Vector::operator-() const {
return Vector(-x,-y,-z);
}
2.改变
return this* + (-v);
至
return *this + (-v);
关于c++ - 如何在 C++ 中重载一元和二元减号运算符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37487033/