2014-10-27 45 views
0

對於C++我很陌生,我想知道是否有任何方法可以重複構造函數,並且傳遞參數的變體。 我需要確定正確的給定值(float或int),檢查float是否可以很好地轉換爲整數(例如1.0),並調用另一個構造函數,如果我的值通過測試,則接受兩個整數。在C++中用於不同參數的多個構造函數

如果任何人有任何關於改進這個解決方案的提示,那一般會很棒。

Fraction(int n, int d) : numerator(n), denominator(d) { 
    simplify(n, d); 
} 

Fraction(float n, float d) { 
    if (!isInteger(n) && !isInteger(d)) { 
     throw invalid_argument("Fractions only accept real numbers."); 
    } else { 
     Fraction(int(n), int(d)); 
    } 
} 

Fraction(int n, float d) { 
    if (!isInteger(n) && !isInteger(d)) { 
     throw invalid_argument("Fractions only accept real numbers."); 
    } else { 
     Fraction(int(n), int(d)); 
    } 
} 

Fraction(float n, int d) { 
    if (!isInteger(n) && !isInteger(d)) { 
     throw invalid_argument("Fractions only accept real numbers."); 
    } else { 
     Fraction(int(n), int(d)); 
    } 
} 
+0

如果您的編譯器支持它們,委託構造函數。 – user657267 2014-10-27 22:22:26

+4

如果你只想支持整數值,爲什麼你想要一個選項,需要'浮動'? – 2014-10-27 22:22:49

+1

你的邏輯對條件是錯誤的。另外,你爲什麼要檢查參數是整數?編譯器應該已經這樣做了。添加無用的消息,並拋出異常只會讓你的代碼更長。 – 2014-10-27 22:26:48

回答

1

那麼你可以只使用浮動ctor和測試你的參數。
如果你只有兩個整數,一個用於浮點數,那麼只有當兩個數字都是int時,纔會調用整數。否則浮動ctor將被調用。

+0

謝謝!我想我只是堅持使用第一個構造函數,而不對數據類型進行任何檢查。 – caubry 2014-10-27 22:44:49

+1

您也可以只使用浮標ctor並始終檢查您的參數。無論適合你最好:) – atlanteh 2014-10-28 05:25:10

相關問題