言葉遣いが下手で申し訳ありませんが、質問の表現方法がよくわかりません。
私は、それ自体のインスタンスを取る純粋な仮想演算子 += を持つ基本クラス A を持っています。派生クラス B では、(A ではなく) B のインスタンスを取るように、基本クラスの operator+= をオーバーライドしたいと思います。
// Abstract base class
template <class T>
class A
{
A() = default;
virtual A<T>& operator+=(const A&) = 0;
}
// Derived class
template <class T>
class B : public A<T>
{
T some_field = 3.14159;
B(const T x) : A(), some_field(x) {}
B<T>& operator+=(const B& b) override
{
this.some_field += b.some_field;
return (*this);
}
}
これが機能しない理由は理解しています。2 つのメソッドは、異なる引数を期待するため、異なる関数です。ただし、A から派生したクラスが、派生クラスのインスタンスを引数として取る operator+= を実装することを保証する何らかの方法が必要であると思います。
virtual operator+=(const <this_class_type>&) = 0;
これに対する解決策を教えてください。どうもありがとう!