0

複数の異なるオブジェクトの加算演算子をオーバーロードして、'cluster オブジェクトを返す必要があります。「加算演算子 (+) をオーバーロードして、デスクトップ、ラップトップ、およびクラスターのインスタンスの任意の組み合わせを追加します。この演算子は、クラスター型のオブジェクトを返す必要があります」したがって、desktop1+laptop1+laptop2 があるとします。すべての RAM と各オブジェクトのその他の変数を追加するクラスターを返すために必要です。ただし、すべてのオブジェクトがコンピューター クラスから継承する変数を追加するだけです。これがプロジェクトの残りのコードです。ありがとう!

#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 
4

1 に答える 1

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;
}

連鎖した + 演算子は、右から左に向かって評価されます。この関数はクラスター オブジェクトを返します。これは、次の加算の右側のオペランドとして使用できます。

于 2013-10-06T22:26:57.347 に答える