派生クラスなのに”抽象クラス”になる

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ミーン
記事: 8
登録日時: 13年前

派生クラスなのに”抽象クラス”になる

#1

投稿記事 by ミーン » 13年前

まずは以下のコードをご覧ください。

コード:

// インターフェースクラス
class InterfaceClass
{

	public:

		virtual void Porygon() = 0;
		virtual void Oshawott() = 0
		virtual void Galvantula() = 0;
		virtual ~InterfaceClass() = 0;

};

// 派生クラス
class ExtendedClass : public InterfaceClass
{

	public:

		void Porygon() { }
		void Oshawott() { }
		void Galvantula() { }
		~ExtendedClass() { }

};
このようなクラスがあったとして、

コード:

ExtendedClass exCls;
とすると抽象クラス型 "ExtendedClass" のオブジェクトは使用できませんというエラーが表示されます。
インターフェースクラスで宣言された全てのメソッドを派生クラスで定義しているのですが…。
何故でしょうか?
I've been deleted because of nothing.

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 派生クラスなのに”抽象クラス”になる

#2

投稿記事 by h2so5 » 13年前

「純粋仮想デストラクタ」について調べてみてください。

アバター
nullptr
記事: 239
登録日時: 13年前

Re: 派生クラスなのに”抽象クラス”になる

#3

投稿記事 by nullptr » 13年前

「抽象クラス」と出たらまず純仮想関数の定義が抜けていると思ったほうがいいです。今回は純仮想デストラクタです。
 
 
✜ で C ご ✜
: す + 注 :
¦ か + 文 ¦
?
Is the は :
order C++? ✜
     糸冬   
  ――――――――
  制作・著作 NHK
 
 

ミーン
記事: 8
登録日時: 13年前

Re: 派生クラスなのに”抽象クラス”になる

#4

投稿記事 by ミーン » 13年前

返信が遅くなってしまい申し訳ありません。

>>h2so5さん
>>新月獅子さん
仰せの通り、以下のようにしていなかったのが原因でした。

コード:

class InterfaceClass
{
 
    public:
 
        virtual void Porygon() = 0;
        virtual void Oshawott() = 0
        virtual void Galvantula() = 0;

		// 仮想デストラクタの”定義”は抽象クラスでも必要なようですね
        virtual ~InterfaceClass() = 0 { ; }
 
};

// このようにしても出来るようです
/*
InterfaceClass::~InterfaceClass() { ; }
*/
 
// 派生クラス
class ExtendedClass : public InterfaceClass
{
 
    public:
 
        void Porygon() { }
        void Oshawott() { }
        void Galvantula() { }
        ~ExtendedClass() { }
 
};
これで通りました。ありがとうございました。
I've been deleted because of nothing.

アバター
nullptr
記事: 239
登録日時: 13年前

Re: 派生クラスなのに”抽象クラス”になる

#5

投稿記事 by nullptr » 13年前

些細な事ですが
>// 仮想デストラクタの”定義”は抽象クラスでも必要なようですね
純仮想デストラクタですね
 
 
✜ で C ご ✜
: す + 注 :
¦ か + 文 ¦
?
Is the は :
order C++? ✜
     糸冬   
  ――――――――
  制作・著作 NHK
 
 

閉鎖

“C言語何でも質問掲示板” へ戻る