2013-10-06 1 views
0

Мне нужно перегрузить оператор сложения нескольких разных объектов и вернуть «объект кластера»: «Перегрузить оператор сложения (+), чтобы добавить любую комбинацию экземпляров для рабочих столов, ноутбуков и кластеров Этот оператор должен возвращать объект типа кластера « Так что если бы у меня был рабочий стол1 + laptop1 + laptop2; Мне нужно было бы вернуть кластер, который добавляет всю ОЗУ и другие переменные каждого объекта. Но это будет только добавление переменных, которые все объекты наследуют от компьютерного класса. Вот мой код остальной части проекта. Благодаря!Оператор с перегрузкой с множеством объектов 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

Я не думаю, что вы хотите «добавить» ресурсы, так как тогда определение кластера необходимо будет заполнить. Прямо сейчас, кластер 'is-a' компьютер, и я предполагаю, что он моделирует машины' numOfComp' с некоторым минимальным общим набором спецификаций_. Ну, академики и надуманные примеры, каждый день: http://coliru.stacked-crooked.com/a/5bfc44a3da7a77ae (бросая метод 'virtual print()') – sehe