0

所以这是我们从老师那里得到的一个相当简单的作业,但这里让我烦恼的是我似乎无法正确处理超载。作业说:

int main()
{
cMoney papers(6, 50), coffee(5, 70), sugar(1), sugar1(sugar);
std::cout << "Total: " << papers + coffee + sugar1 << std::endl;
}

到目前为止,我制作的部分代码是:

class cMoney{


private:
   double mIznos;


public:
    cMoney();
    cMoney(double a);
    cMoney(cMoney&);
    cMoney& operator+=(const cMoney& paper);
    ~cMoney();

    };

    cMoney::cMoney(double a){

        mIznos=a;

    }

    cMoney::cMoney(cMoney& number){

        mIznos=number.mIznos;
    }

    cMoney& cMoney::operator+=(const cMoney& paper){

            cMoney temp;
            temp.mIznos=paper.mIznos;
            return temp;
    }


    cMoney::~cMoney(){

    std::cout<<"Destructor for:"<<mIznos<<std::endl;
    }


int main(){

    cMoney paper(6.50),coffee(5.70),sugar(1),sugar1(sugar);

    return 0;
}

问题是我试图使重载,但我似乎无法弄清楚如何使papers + coffee + sugar1. 如果是papers=coffee+sugar或类似的东西就可以了。仅作记录;我刚开始学习 C++,所以请温柔一点。:D

4

1 回答 1

4

实际上,最好的方法是很容易做到这一点。把这个放在你的课后。(不在)

cMoney operator+(cMoney copy_of_left, const cMoney& reference_to_right)
{return copy_of_left += reference_to_right;}

现在我实际上查看了您的代码,您的operator+=函数只是复制了右侧,而完全忽略了左侧,因此您必须先修复它。

papers + coffee + sugar1;
//is the same as
((papers + coffee) + sugar1);
//is prefix notation is
+( +(papers,coffee), sugar1);
//in C++ is
operator+( operator+(papers, coffee) ,sugar1);

所以只要添加这个函数就足以让 C++ 自动知道如何正确编译papers + coffee + sugar1.

于 2013-05-16T22:52:26.463 回答