如何在C+中重载一元和二元减号运算符+;? 在C++中,对于一元和二元减算子,操作符重载函数是如何区分的?< /P>
我正在尝试使用以下代码重载这两个:如何在C+中重载一元和二元减号运算符+;? 在C++中,对于一元和二元减算子,操作符重载函数是如何区分的?< /P>,c++,operator-overloading,C++,Operator Overloading,我正在尝试使用以下代码重载这两个: 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:8
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,不能使用非const成员函数调用它。由于运算符-
和运算符+
(一元和二元版本)不会修改类的成员,所以应该使它们成为常量成员函数
Vector Vector::operator-() const {
return Vector(-x,-y,-z);
}
2.改变
return this* + (-v);
到
作为自由函数而不是成员函数实现。或者(如果您坚持将其实现为成员函数)将其标记为
const
成员函数,即Vector Vector::operator-(const Vector&)const代码>和向量向量::运算符-()常量`@这只是一个语法错误<代码>此*+(-v)
将在v
上调用一元运算符-
,并在返回值上调用一元运算符+
,然后失败,因为您只定义了一个二进制运算符+
*此+(-v)
将在v
上调用一元运算符-
,而*此
将取消对此
的引用,然后用它们调用二进制运算符+
。
return *this + (-v);