我有一个类MyFloat:Class对象为float类型
class MyFloat
{
public:
float value = 0.0;
}
我以这种方式使用它为止:
MyFloat *myfloat1 = new MyFloat;
myfloat1->value = 1.0;
我怎样才能让
myfloat1 = 2.0;
if (myfloat1 < 3.0){
...
}
我有一个类MyFloat:Class对象为float类型
class MyFloat
{
public:
float value = 0.0;
}
我以这种方式使用它为止:
MyFloat *myfloat1 = new MyFloat;
myfloat1->value = 1.0;
我怎样才能让
myfloat1 = 2.0;
if (myfloat1 < 3.0){
...
}
你可以使用operator=
和operator float
class MyFloat
{
public:
float value = 0.0;
MyFloat& operator=(float f)
{
value = f;
return *this;
}
operator float() const
{
return value;
}
};
int main() {
MyFloat f;
f = 10.0f;
float x;
x = f;
return 0;
}
谢谢!您的回答最合适 –
您的对象类型为MyFloat
,而不是float
,因此您无法为其分配浮点值。你可以做的是通过覆盖类=
赋值运算符分配一个浮点值到类的数据成员:
MyFloat& operator=(float p) {
value = p;
return *this;
}
正如其他人mentiond你可以提供一个operator=(float)
,但是对于MyFloat
更自然
class MyFloat {
public:
float value = 0.0;
MyFloat(float x) : value(x) {}
MyFloat() {}
};
int main() {
MyFloat x;
x = 1.0; // works because MyFloat(float) is used
MyFloat y(2.0); // this is nicer
}
PS:用一个float
,而不是首先构建它,然后分配一个值来构建由R2RT指出的那样,你不想使用构造x = 1.0;
,但赋值运算符(我刚出线,因为那就是你 要求)。但是,对于新构建的MyFloat
,我总是希望将值传递给构造函数。
至于我 - 它不应该是'相反',而是'也' - 您在分配时创建MyFloat的新实例 - 可能是常量和意外的行为。 – R2RT
@ R2RT我只把'x = 1.0;'因为那是OP所要求的。我同意对'x = 1.0;'使用'operator ='更好,但是如果可能的话,我会一直倾向于使用编辑的构造函数 – user463035818
@ R2RT来避免误解 – user463035818
你的意思是你想这样做吗?:myfloat1 = 2.0; –
假设你想做出最后的陈述,你可以提供一个'operator =(float)'。 “让这个类的实例返回一个浮点类型”并不清楚你的意思是什么 – user463035818
@ΦXocę웃Пеневз是 –