0

このリンクからの質問に対する最高評価の回答では、派生代入演算子が基本クラスから代入演算子を呼び出す方法がわかりません。つまり、コードのこの部分では次のようになります。

Derived& operator=(const Derived& d)
{
    Base::operator=(d);
    additional_ = d.additional_;
    return *this;
}

何をしますか

Base::operator=(d)

平均?それは何をするためのものか?乾杯!

4

2 に答える 2

4

Base::operator=Baseのクラス バージョンを呼び出してoperator=、オブジェクトの一部である部分をコピーしBase、派生クラスが残りをコピーします。基本クラスはすでに必要なすべての作業を正しく行っているため、なぜ作業を繰り返すのか、再利用するだけです。それでは、この簡単な例を見てみましょう。

class Base
{
   std::string
      s1 ;
   int
      i1 ;
   public:
     Base& operator =( const Base& b)  // method #1
     {
        // trvial probably not good practice example
        s1 = b.s1 ;
        i1 = b.i1 ;

        return *this ;
     }
} ;

class Derived : Base
{
   double
     d1 ;
   public:
     Derived& operator =(const Derived& d ) // method #2
     {
       // trvial probably not good practice example
       Base::operator=(d) ;
       d1 = d.d1 ;
       return *this ;

     }

} ;

Derivedには 3 つのメンバー変数があり、2 つは from Base:s1i1、1 つはそれ自身のd1です。そのため、whichから継承した 2 つの変数をコピーするというラベルを付けたものBase::operator=を呼び出します。method #1DerivedBases1i1d1method #2

于 2013-03-14T20:05:42.867 に答える
1

これは、現在のオブジェクトのメンバー関数を呼び出すだけです。現在のオブジェクトは、完全修飾名が である関数を継承しておりBase::operator=、他の非静的メンバー関数と同じように呼び出すことができます。

于 2013-03-14T20:14:04.870 に答える