以下の2つの純粋仮想関数のみのクラス(インタフェース)があります。
class Objectable
{
public:
virtual const string getName() const throw() = 0;
virtual const string toString() const throw() = 0;
};
class Runnable : public Objectable
{
public:
virtual const void run() = 0;
};
そして、Objectable を実装したクラス Object があり、
class Object : public Objectable
{
protected:
string name;
public:
Object(const string name = Object) throw();
virtual const string getName() const throw();
virtual const string toString() const throw();
};
その Object を継承し、Runnable を実装するクラス ProcessImp を定義しました。
class ProcessImp : public Object, Runnable
{
public:
ProcessImp(string name);
virtual const void run();
};
この継承関係では Object が既に Objectable で定義される getName()、toString()
を実装しています。
にも関わらず、Object を 継承した ProcessImp をコンパイルする時に、
「純粋仮想関数 getName()、toString() が定義されていません。」
とエラーが出てしまいます。
なぜでしょうか?
オブジェクト指向の設計に不慣れなもので、こういう場合は
クラスをどう構成すればいいのかわかりません。
御教授願えませんでしょうか?
Objectの方は純粋仮想関数をオーバーライドしていますが、
Runnableの方はObjectableの純粋仮想関数をオーバーライド
していません。
エラーが出ているのは、Runnableの純粋仮想関数がそのまま
なので、ProcessImpが抽象クラスだと判断されたためです。