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

基底クラスが実装しているメソッドが定義...
 
通知
すべてクリア

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


hide
 hide
(@hide)
ゲスト
結合: 24年前
投稿: 11
Topic starter  

以下の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
 jacta
(@jacta)
ゲスト
結合: 24年前
投稿: 10
 

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました