Sai*_*ait 0 c++ operator-overloading
我正在尝试使用C++使用参数重载来实现这一点:
Complex c(3.0, 4.0);
double magnitude = | c; // magnitude will be 5
Run Code Online (Sandbox Code Playgroud)
我写了下面的代码:(这里只有必要的部分..)
class Complex
{
public:
double _real;
double _imaginary;
friend double operator|(const Complex &c1)
{
return sqrt(c1._real * c1._real + c1._imaginary * c1._imaginary);
}
}
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
error C2805: binary 'operator |' has too few parameters
Run Code Online (Sandbox Code Playgroud)
operator |仅使用1个参数是不可能的?
friend double operator|(const Complex &c1)
{
return sqrt(c1._real * c1._real + c1._imaginary * c1._imaginary);
}
Run Code Online (Sandbox Code Playgroud)
这没有定义成员运营商,只是FYI.
double magnitude = | c;
Run Code Online (Sandbox Code Playgroud)
这是无效的语法,|是一个二元运算符.
class Complex
{
public:
double _real;
double _imaginary;
double getMagnitude() const // POP POP!
{
return sqrt(_real * _real + _imaginary * _imaginary);
}
}
Run Code Online (Sandbox Code Playgroud)
没有更多的奖金.
|仅使用1个参数就不可能使用运算符吗?
只要涉及的类型中的至少一个是用户定义的类型,您就可以重载运算符,但是您无法更改它们可以采用的参数的行为.
由于错误消息告诉您|是二元运算符,因此您不能将其重载以充当一元运算符.
这样做的正确方法是什么?
您应该为您的班级提供实用功能Complex,并对其进行适当命名,并以最佳方式为您完成工作.
请注意,操作符重载的最基本规则是:
"只要操作符的含义不明显且无可争议,就不应该重载.而是提供一个具有良好选择名称的函数."
该规则适用于非直观的操作员使用.