2017-08-11 91 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

相關問題