运算符重载(*,+, - ,/,=)?

Aan*_*Aan 2 c++ operator-overloading

我试图在FLOAT课堂上重载(*,+, - ,/,=)opertors .我写了这堂课:

class FLOAT{
private:
float x;
public:
FLOAT(){    x=0.0;  }
void setFloat(float f)      {   x=f;    }
void operator+(FLOAT obj)   {x=x+obj.x; };
void operator-(FLOAT obj)   {x=x-obj.x; };
void operator*(FLOAT obj)   {x=x*obj.x; };
void operator/(FLOAT obj)   {x=x/obj.x; };
FLOAT& operator=(const FLOAT& obj)  {this->x=obj.x; return *this;   };
};
Run Code Online (Sandbox Code Playgroud)

我用它如下:

int main() {
FLOAT f,f2,f3;
f.setFloat(4);
f2.setFloat(5);

f3=f+f2;// here is the problem!
    system("pause");//to pause console screen
return 0;
}
Run Code Online (Sandbox Code Playgroud)

f3=f+f2似乎不对.我能做什么?

Kev*_*pps 8

我认为你的运营商实现不会做你想要的.例如:

FLOAT f1; f1.setFloat(1.0);
FLOAT f2; f2.setFloat(2.0);
FLOAT f3;
f3 = f1 + f2;
Run Code Online (Sandbox Code Playgroud)

假设你改变operator +(),例如,返回一个FLOAT,你仍然会有这样的效果:加法后,f1和f3都等于3.0;

一个常用的习惯用法是在类中实现像+ =这样的运算符,在类之外实现类似+的运算符.例如:

class FLOAT {...
    FLOAT& operator+=(const FLOAT& f)
    {
        x += f.x;
        return *this;
    }
};
Run Code Online (Sandbox Code Playgroud)

...

FLOAT operator+(const FLOAT& f1, const FLOAT& f2)
{
    FLOAT result(f1);
    f1 += f2;
    return f1;
}
Run Code Online (Sandbox Code Playgroud)

这样做的另一个好处是,您还可以轻松添加其他运营商

FLOAT operator+(int x, const FLOAT& f);
FLOAT operator+(double x, const FLOAT& f);
Run Code Online (Sandbox Code Playgroud)

如果你想用更复杂的数字或矩阵等更有趣的类型来完成这项工作,那么在类这样的课上做一个彻底的工作是很好的做法.请确保添加比较运算符,复制构造函数,析构函数和赋值运算符以确保完整性.祝好运!


cra*_*str 6

你的运营商都相当于+=,-=等,如果你想+,你还需要返回一个值!

FLOAT operator+(FLOAT obj)
{
    FLOAT tmp;
    tmp.x = x+obj.x;
    return tmp;
}
Run Code Online (Sandbox Code Playgroud)


Rob*_*b K 5

您不能将void函数的返回值赋给任何东西,因为它不返回任何内容.声明操作符重载为友元函数通常更灵活.你的类和函数应该更像这样:

class FLOAT { 
    friend FLOAT operator+( const FLOAT & a, const FLOAT & b );

   /* ... rest of class ... */
};


FLOAT operator+( const FLOAT & a, const FLOAT & b ) 
{
    FLOAT temp( a );
    temp.x += b.x; 
    return temp;
}
Run Code Online (Sandbox Code Playgroud)