4

派生クラス オブジェクトの基本クラス部分の基本クラスに演算子のオーバーロードを実装するにはどうすればよいですか?

このサンプル コードを参照して、派生クラス オブジェクトに * 演算子を実装する基底クラス部分を実装してください。

class base {
     int x;
public:

};

class der : public base {
    int y;
public:
    const der operator*(const der& rh) {
        der d;
        d.y = y * rh.y;
        return d;
    }

};
4

2 に答える 2

1
class base {
     int x;
public:
     base & operator *=(const base &rh) {
         x*=rh.x;
         return *this;
     }
     base operator *(const base &rh) {
         base b = *this;
         b*=rh;
         return b;
     }
};

class der : public base {
    int y;
public:
    using base::operator*;
    der & operator*= (const der& rh) {
         base::operator*=(rh);
         y*=rh.y;
         return *this;
    }
    const der operator*(const der& rh) {
        der d = *this;
        d*=rh;
        return d;
    }

};
于 2012-04-19T10:11:22.753 に答える
-1

以下のように実装base::operator *します。

class base {
protected:
  int x;
public:
  base operator * (const base &rh) {
    base b;
    b.x = x * rh.x;
    return b;
  }
};

そして、それを次のように呼び出します。

der operator * (const der& rh) {
  der d;
  Base &b = d;  // <---- assign a temporary reference of 'base'
  b = static_cast<Base&>(*this) * rh; // <---- invoke Base::operator *
  d.y = y * rh.y;
  return d;
}
于 2012-04-19T10:09:25.893 に答える