2017-08-11 499 views
1

我有一个类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){ 
... 
} 
+0

你的意思是你想这样做吗?:myfloat1 = 2.0; –

+0

假设你想做出最后的陈述,你可以提供一个'operator =(float)'。 “让这个类的实例返回一个浮点类型”并不清楚你的意思是什么 – user463035818

+0

@ΦXocę웃Пеневз是 –

回答

3

你可以使用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; 
} 
+0

谢谢!您的回答最合适 –

1

您的对象类型为MyFloat,而不是float,因此您无法为其分配浮点值。你可以做的是通过覆盖类=赋值运算符分配一个浮点值到类的数据成员:

MyFloat& operator=(float p) { 
    value = p; 
    return *this; 
} 
2

正如其他人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,我总是希望将值传递给构造函数。

+0

至于我 - 它不应该是'相反',而是'也' - 您在分配时创建MyFloat的新实例 - 可能是常量和意外的行为。 – R2RT

+0

@ R2RT我只把'x = 1.0;'因为那是OP所要求的。我同意对'x = 1.0;'使用'operator ='更好,但是如果可能的话,我会一直倾向于使用编辑的构造函数 – user463035818

+0

@ R2RT来避免误解 – user463035818

相关问题