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似乎不对.我能做什么?
我认为你的运营商实现不会做你想要的.例如:
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)
如果你想用更复杂的数字或矩阵等更有趣的类型来完成这项工作,那么在类这样的课上做一个彻底的工作是很好的做法.请确保添加比较运算符,复制构造函数,析构函数和赋值运算符以确保完整性.祝好运!
你的运营商都相当于+=,-=等,如果你想+,你还需要返回一个值!
FLOAT operator+(FLOAT obj)
{
FLOAT tmp;
tmp.x = x+obj.x;
return tmp;
}
Run Code Online (Sandbox Code Playgroud)
您不能将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)