1

return *thisC++のステートメントを使用したカスケードについて質問があります。教科書を読んでいて、完全に理解していないカスケードの使用法に出くわしました。

次のコードは、私自身の構成です。

#include <iostream>
using namespace std;

class Time
  {
  public:
     Time( int = 0, int = 0 ); 
     Time & setHour( int );                 
     void print( void );
     Time & operator+=( int ); // Line in Question 

  private:
     int hour; 
     int minute; 
  };

  Time::Time(int hr, int mn)
  {
     hour = hr;
     minute = mn;
  }

  Time & Time::operator+=(int increment) // Line in Question
  {
    hour += increment;
    return *this;
  }

  Time & Time::setHour(int h)
  {
    hour = h;
    return *this;
  }

  void Time::print( void )
  {
     cout << "hour = " << hour << endl;
     cout << "minute = " << minute << endl;
  }

int main()
{
   cout << "Hello, world!" << endl;
   Time t;
   (t+=3)+=4;
   t.print();
   int x = 4;
   (x+=4)+=5;
   cout << x << endl;
}

+=整数変数を使用して「カスケード」するのと同じ意味で、演算子を「カスケード」できることに注意してくださいx。私が読んでいるテキストは、コメントでマークされた問題の 2 行が Time の前に// Line in Questionキーワードを持つべきであることを示唆しているようです。constつまり、関数は Time オブジェクト定数への参照を返します。Date のデータ メンバーを変更しているため、なぜこれが正しいのか (またはこれが理にかなっている場合) がわかりません。

constマークされた行の先頭にキーワードを配置する目的は何// Line in Questionですか?

ありがとう。

4

1 に答える 1

1

// Line in Question とマークされた行の先頭にキーワード const を含める目的は何ですか?

constから参照を返すと、次のような関数で使用している種類のカスケードを防止operator +=する効果があります。main()

(t+=3)+=4;

はオブジェクトt+=3への定数参照を返すため、これは防止されます。また、それ自体は として修飾されていないため、によって返された参照に適用しようとするとコンパイル エラーが発生します(非物体)。Timeoperator +=const+= 4constt+=3constconst

この本の著者が、これを防ぐ理由についてコメントしてくれることを期待しています。個人的には、なぜここで有害なのかわかりません。

于 2013-02-15T00:35:10.503 に答える