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 などの場合は OK です。記録のために。私は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);

したがって、この関数を 1 つ追加するだけで、C++ が適切にコンパイルする方法を自動的に知ることができますpapers + coffee + sugar1

于 2013-05-16T22:52:26.463 に答える