C ++中的奇怪重载任务

时间:2013-05-16 22:48:47

标签: c++ algorithm

所以这是我们从老师那里得到的一项相当简单的任务,但是这里让我感到困惑的是我似乎无法获得超载权利。 作业说:

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。如果是纸张=咖啡+糖或类似的东西OK。仅供记录;我刚开始学习C ++,所以请保持温和。 :D

1 个答案:

答案 0 :(得分: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