1
class A
{
   int Avalue;
   A& operator=(A& copyMe)
   {
       Avalue = copyMe.Avalue;
       return *this;
   }
}

class B:public A
{
   int Bvalue;
   B& operator=(B& copyMe)
   {
       Bvalue = copyMe.Bvalue
       return *this;
   }
}

Bの代入演算子からAまたは基本クラスの代入演算子を呼び出す方法は?。代入演算子の呼び出しからのAの戻り参照を処理する方法。

4

3 に答える 3

2

すべての演算子はちょっとした巧妙な関数と考えることができますが、それは与えられたオペランドが何であるかを推測し、それらをオーバーライドに渡すのに十分賢いコンパイラーのおかげです。これは、理にかなっている状況で優れたシンタックスシュガーを追加するための優れた拡張可能な方法ですが、通常の使用法のため、これが有効であるかどうかは実際にはわかりませんが、オーバーライドの定義を観察すると、関数のように見え、次のように動作します。関数。したがって、スコープ演算子を使用して::、Aのインターフェイスのパブリック部分にアクセスするだけです。

A::operator=(copyMe)

いくつかのセミコロンが欠落していることに注意してください。また、クラスはデフォルトでprivateアクセスします。Aのコピー代入演算子にアクセスするには、それをpublicとして指定する必要があります。

class A
{
  private:
   int Avalue;
  public:
   A& operator=(A& copyMe)
   {
       Avalue = copyMe.Avalue;
       return *this;
   }
}
于 2012-06-26T03:00:13.157 に答える
1

スコープ演算子を使用して、代入演算子(またはその他の関数)を明示的に呼び出します。A:: operator =(someval);

チェックアウト: http: //en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

于 2012-06-26T02:47:45.130 に答える
0

A::operator=(copyMe)派生した操作を追加する必要があります。また、コピーは非定数参照である必要があります。

于 2012-06-26T02:43:53.123 に答える