c++ - 使用许多对象重载加法运算符 C++

标签 c++ object overloading operator-keyword addition

我需要重载多个不同对象的加法运算符并返回一个 '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 

最佳答案

如果您只想将它​​们从计算机继承的所有类的公共(public)值相加,您可以这样做:

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

链式 + 运算符从右向左求值。该函数返回一个簇对象,然后可以将其用作下一次加法的右手操作数。

关于c++ - 使用许多对象重载加法运算符 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19214482/

相关文章:

java - 将 java 转换为 scala 代码 - 更改方法签名

java - 简单的JAVA程序错误,使用多个类

javascript - 从外部只读,从内部不可读取

c++ - 重载模板函数选择(模式匹配)如何在 std::vector 插入中工作?

c++ - 如何使用 C++ 分发 lua 文件

C++ ifstream读取偏移范围

c++ - Qt: QProcess调用终端+脚本

c++ - 如何以与平台无关的方式终止卡在阻塞 IO 上的线程?

git - 树包含重复的文件条目

c++ - 内联重载抛出错误 C++