我有一個類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ę웃Пеневз是 –