1

演算子のオーバーロードを始めたばかりで、概念を理解しようとしています。したがって、演算子 + をオーバーロードしたいと思います。私のヘッダーファイルには

   public:
    upDate();
    upDate(int M, int D, int Y);
    void setDate(int M, int D, int Y);
    int getMonth();
    int getDay();
    int getYear();
    int getDateCount();
    string getMonthName();
    upDate operator+(const upDate& rhs)const;

    private:
        int month;
        int year;
        int day;

したがって、基本的に私のメインでは、upDate からオブジェクトを作成し、それを int に追加したいと考えています。

    upDate D1(10,10,2010);//CONSTRUCTOR
    upDate D2(D1);//copy constructor
    upDate D3 = D2 + 5;//add 5 days to D2

D2 に 5 日追加されるように、過負荷をどのように記述しますか? 私はこれを持っていますが、構文が正しくなく、エラーがまだ表示されると確信しています。どんな助けでもいただければ幸いです

   upDate upDate::operator+(const upDate& rhs)const

  {

    upDate temp;
    temp.day = this->day+ rhs.day;
    return temp;
 }
4

3 に答える 3

4

int を引数とする operator+ の別のオーバーロードを定義する必要があります。

  upDate upDate::operator+(int days) const{    
    upDate temp(*this);
    temp.day += days;
    return temp;
 }

編集: Dolphiniac が指摘したように、コピー コンストラクターを定義してtemp正しく初期化する必要があります。

于 2013-05-08T20:24:35.887 に答える
3

実際に のコピーを作成するには、コピー コンストラクターを作成しますthisthisあなたの関数は、通常はインスタンスにあるフィールドが欠落しているオブジェクトを返しています。

于 2013-05-08T20:25:05.603 に答える
1

compound plus代わりに演算子をオーバーロードしてください。

upDate& upDate::operator+=(const int& rhs)
{
    this->day += rhs;
    return *this;
}

そして、あなたは次のようなことができます

D2 += 5;
于 2013-05-08T20:26:05.197 に答える