2013-10-06 42 views
0

我需要重載多個不同對象的加法運算符,並返回「集羣對象: 」重載加法運算符(+),以便爲桌面,便攜式計算機和羣集添加實例組合。這個運算符應該返回一個類型集羣對象「 所以,如果我有desktop1 + laptop1 + laptop2;我需要它來返回一個集羣,該集羣添加了所有的RAM以及每個對象的其他變量。但它只會添加所有對象從計算機類繼承的變量。這是我的項目其餘部分的代碼。謝謝!使用多個對象重載加法運算符C++

#include <iostream> 

using namespace std; 

class computer 
{ 
    public: 
     double RAM; 
     double CPUSpeed; 
     int numberOfCores; 
     double HDDSize; 
     virtual void print(); 
}; 
class desktop : public computer 
{ 
    public: 
     bool hasMonitor; 
     double monitorSize; 
     friend istream& operator>> (istream &in, desktop &myDesktop); 
}; 
class laptop : public computer 
{ 
    public: 
     double screenSize; 
}; 
class cluster : public computer 
{ 
    public: 
     int numOfComp; 
}; 
desktop::desktop() 
{ 
    RAM = 0; 
    CPUSpeed = 0; 
    numberOfCores = 0; 
    HDDSize = 0; 
    hasMonitor = 0; 
    monitorSize = 0; 
} 
laptop::laptop() 
{ 
    RAM = 0; 
    CPUSpeed = 0; 
    numberOfCores = 0; 
    HDDSize = 0; 
    screenSize = 0; 
} 
cluster::cluster() 
{ 
    RAM = 0; 
    CPUSpeed = 0; 
    numberOfCores = 0; 
    HDDSize = 0; 
    numOfComp = 0; 
} 
istream& operator>> (istream &in, desktop &myDesktop) 
{ 
    in >> myDesktop.hasMonitor; 
    in >> myDesktop.monitorSize; 
    in >> myDesktop.RAM; 
    in >> myDesktop.CPUSpeed; 
    in >> myDesktop.HDDSize; 
    in >> myDesktop.numberOfCores; 
    return in; 
} 
istream& operator>> (istream &in, laptop &mylaptop) 
{ 
    in >> mylaptop.RAM; 
    in >> mylaptop.CPUSpeed; 
    in >> mylaptop.HDDSize; 
    in >> mylaptop.numberOfCores; 
    in >> mylaptop.screenSize; 
    return in; 
} 
istream& operator>> (istream &in, cluster &myCluster) 
{ 
    in >> myCluster.RAM; 
    in >> myCluster.CPUSpeed; 
    in >> myCluster.HDDSize; 
    in >> myCluster.numberOfCores; 
    in >> myCluster.numOfComp; 
    return in; 
} 
operator+(computer &myComp) 
{ 
    return 
+0

http://stackoverflow.com/questions/4421706/operator-overloading – sehe

回答

1

如果你只想共同的價值加起來一切,他們從電腦繼承的類,你可以做這樣的:

cluster operator+(const computer& comp1, const computer& comp2) 
{ 
    cluster ret; 
    ret.RAM = comp1.RAM+comp2.RAM; 
    ret.CPUSpeed = comp1.CPUSpeed+comp2.CPUSpeed; 
    ret.numberOfCores = comp1.numberOfCores+comp2.numberOfCores; 
    ret.HDDSize = comp1.HDDSize+comp2.HDDSize; 
    return ret; 
} 

int main() 
{ 
    laptop laptop1; 
    desktop desktop1; 
    desktop desktop2; 
    cluster mycluster = laptop1+desktop1+desktop2; 
    return 0; 
} 

鏈式+運營商正在從右邊評價向左。該函數返回一個集羣對象,然後可以將它用作下一個添加的右側操作數。

+0

太棒了,謝謝! – mrplow911

+0

我不認爲你想「添加」資源,因爲羣集的定義需要進行聚合。現在,一個集羣是一臺「計算機」,我的猜測是它使用一些最常見的specs_來模擬'numOfComp'機器。哦,學術界和人爲的例子,每天:http://coliru.stacked-crooked.com/a/5bfc44a3da7a77ae(拋出'虛擬print()'方法) – sehe