いくつかの純粋な仮想二項演算子を使用して抽象クラスを作成しようとしています。これは、演算子のポリモーフィズムを実現するために、派生クラスによって実装する必要があります。簡単な例を次に示します。
class Base {
public:
virtual const Base& operator+ (const Base&) const = 0;
};
class Derived : public Base {
public:
const Derived& operator+ (const Derived&) const;
};
const Derived& Derived::operator+ (const Derived& rvalue) const {
return Derived();
}
オペレーターが何をするかは今のところ重要ではありません。重要な部分は、オペレーターが何を返すかです。一時的なDerivedオブジェクト、またはそのオブジェクトへの参照を返します。さて、コンパイルしようとすると、次のようになります。
test.cpp: In member function ‘virtual const Derived& Derived::operator+(const Derived&) const’:
test.cpp:12:17: error: cannot allocate an object of abstract type ‘Derived’
test.cpp:6:7: note: because the following virtual functions are pure within ‘Derived’:
test.cpp:3:22: note: virtual const Base& Base::operator+(const Base&) const
どうしたの?operator +(Baseで唯一の純粋仮想関数)がオーバーライドされていませんか?Derivedも抽象的である必要があるのはなぜですか?