2013-09-30 159 views
1

我正在編寫一個基本的類程序,我已經完成了所有運算符重載,現在我想嘗試重載所有的運算符。我也會嘗試+,==,!=和< <但是現在我對乘法感到困惑。*運算符重載

  1. 在測試驅動程序中,用戶輸入一個因子。我在課堂上定義了這個因子,但不知道如何從驅動程序中給它賦值。有任何幫助?

  2. 在運算符重載函數中,我想將該因子乘以對象。 - >該對象有五個組件,它是一個數字列表。總和,長度,平均值,最小值和最大值。用一個常數乘以一個對象的目的是產生一個與第一個相同的類,除了列表中的每個數字已經乘以因子。爲了達到這個目的,所有需要做的事情就是將總和乘以係數,將新的總和除以舊的長度以得到新的平均值,然後將最小值和最大值乘以因子。

這裏是我的過載至今:

Statistician Statistician::operator* (Statistician& temp) 
{ 
    Statistician Stat3; 

    Stat3.newLength = temp.newLength; 
    Stat3.newSum = (factor * temp.newSum); 
    Stat3.newMean = (temp.newSum/temp.newLength); 
    Stat3.newMaximum = (factor * temp.newMaximum); 
    Stat3.newMinimum = (factor * temp.newMinimum); 

    return Stat3; 
} 

這裏還有什麼是在測試驅動程序:

system("CLS"); 
cout << endl << " Multiply by factor of: "; 
cin >> // Input factor 
Stat3 = Stat1 * factor; 

最後,我在類中定義的 「因子」,在「私人「 - 讓我知道如果這是錯誤的。

+0

你得到什麼錯誤?在你的例子中,除非Factor是Statistician類型的變量,否則你將會遇到編譯器錯誤。運算符重載中的參數是表達式右側的對象,IE Stat1 *因子等同於Stat1.operator *(factor);. – IllusiveBrian

回答

1

你通常不希望修改你申請operator*的對象,因此它的簽名是

Statistician Statistician::operator* (const Statistician& temp) const; 

:如果你打電話Stat1*factor*thisStat1tempfactor。也就是說,你可能想要考慮實施operator*=並根據這個定義operator*。有些圖書館可以幫助你,看到我的個人資料的一些鏈接。

如果你想實現operator*=,其簽名會

Statistician& Statistician::operator*= (const Statistician& value); 

,如果factor可能是一些其他類型的,你可以重載該類型,例如:

Statistician& Statistician::operator*= (const int value); 

到允許按整數值縮放Statistician的實例。後者似乎比在類中存儲一些因子更合適,但沒有看到更多的代碼就很難說清楚。

下面是一個operator*=(const int factor)一個建議:

Statistician& Statistician::operator*= (const int factor) 
{ 
    newSum *= factor; 
    newMean = newSum/newLength; 
    newMaximum *= factor; 
    newMinimum *= factor; 
    return *this; 
} 

,你可以看到,事情通常變得更容易,因此更不容易出錯,如果你做的正確途徑。

既然你可以直接調用operator*=,就不需要在你的類中存儲一個因子,並且類本身變得更容易。最後,你可以定義operator*作爲一個自由函數類之外:

Statistician operator* (const Statistician& lhs, const int factor) 
{ 
    Statistician result(lhs); // make a copy 
    result *= factor; 
    return result; 
} 

或只使用庫來產生operator*你。

+0

謝謝一堆。我成功地實現了* = ...做了更多的研究,發現重載*是罕見的,對我而言是不必要的。 謝謝你的幫助! -Rachel – 404Cat