基底クラスが実装しているメソッドが定義されていないとエラーになります。

[戻る]
hide 2001/03/21(水) 14:09:04
以下の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() が定義されていません。」
とエラーが出てしまいます。

なぜでしょうか?
オブジェクト指向の設計に不慣れなもので、こういう場合は
クラスをどう構成すればいいのかわかりません。
御教授願えませんでしょうか?

jacta 2001/03/24(土) 23:42:26
Objectの方は純粋仮想関数をオーバーライドしていますが、
Runnableの方はObjectableの純粋仮想関数をオーバーライド
していません。
エラーが出ているのは、Runnableの純粋仮想関数がそのまま
なので、ProcessImpが抽象クラスだと判断されたためです。

古いスレッドには追加発言できません。