2012-11-19 50 views
2
class foo{ 

public: 
    double v1, v2, v3; 
    double x, y; 

    foo(const double &a){ 
     set_var(); 

     x = a; 

     if(a == v1) 
      y = 1; 
     else if(a == v2) 
      y = 0; 
     else if(a == v3) 
      y = 2; 
    } 

    void set_var(){ 
     // v1, v2 and v3 will always be the same values as the corresponding double values 
     // that foo a,b and c are being set to in main() 
     v1 = 1.4; 
     v2 = 1.4; 
     v3 = 1.4; 
    } 

}; 

,並在主功能:區分變量值的多個實例?

main(){ 
    foo a = 1.2, b = 1.2, c = 1.2; 
} 

從本質上講,我想這個代碼做當我們試圖建立「富A,B,C」相同的雙值(因此「 v1,v2,v3'也是相同的值)是foo a = 1.4給出ay = 1, foo b = 1.4給出by = 0,並且foo c = 1.4給出cy = 2

短僞碼。基本上,'foo a'應該總是使用第一個if子句,'foo b'應該總是使用第二個,'foo c'應該總是使用第三個。

作爲這個任務的一部分,我必須以這種方式實現主函數。它不能改變。

我的第一個想法是,即使我試圖將foo a,b,c設置爲相同的雙倍,那麼double總會佔用內存中的不同位置,不是嗎?所以也許我可以以某種方式在構造函數中傳入雙重地址& x?然後設置該地址來表示v1,v2和v3,而不是首先使用這些變量?

我只是需要得到代碼來做我上面幾段描述的內容,即使在double值相等時也是如此。

+0

您忘記了您在'main'上的返回類型 –

+1

我不認爲您完全清楚您打算在此實現的目標。 'foo'不是'double'。 –

+0

避免使用相等比較浮點數。在網上搜索「每個程序員應該知道什麼是浮點數」。 –

回答

2

由於看起來你的問題是關於家庭作業的,所以我打算向你指出static member variables的方向,簡而言之,它們是給定類的所有實例之間共享的類變量。您可以使用一個或多個這些變量來跟蹤實例的實例化進度。

0

不幸的是如果滿足以下兩個條件都爲真:

總之僞代碼。基本上,'foo a'應該總是使用第一個,如果 從句,'foo b'應該總是使用第二個,'foo c'應該總是使用第三個。作爲這一任務的一部分

,我必須實現該 方式的主要功能。它不能改變。

...然後你運氣不好。您的主要功能在a,bc之間沒有任何區別,但名稱除外。

也許我誤解了你的措辭中的某些東西 - 如果是的話,你能澄清一下嗎?