#include <iostream>
using namespace std;
class base
{
public:
virtual void taunt() = 0;
virtual void hide() = 0;
};
template <int nx, int ny>
class derivedA : public base
{
void hide();
public:
void taunt() { cout << "derivedA" << endl; }
char c[nx][ny];
};
template <int nx, int ny, int nz>
class derivedB : public base
{
void taunt();
public:
void hide() { cout << "hide B" << end; }
char c[nx][ny][nz];
};
int main()
{
derived * dp = new derivedA();
dp->taunt();
delete dp;
DerivedB b;
dp = &b;
dp->hide();
return 0;
}
AとBはどちらも純粋な仮想クラスベースから派生し、どちらも実装されていない1つのメソッドを持っています。 1つのメソッドを実装しないままにしておくことは合法ですか? 1つのメソッドを実装しないままにしておくことは、受け入れられるか、または良い習慣ですか?より良い方法がありますか?メソッドを実装しないままにしておくことは合法で、良い方法ですか?
編集: 私はクラスがベースから派生していないことに気付きました。私はそれがそうするようにコードを変更しました。
* "AとBはどちらも純粋な仮想クラスベースから派生しています" * - いいえ、そうではありません。彼らはどちらも根拠がない。 –
未完成の単一のメソッドでもクラスをインスタンス化することはできません。ランダムなコンパイラで試してみると、コンパイルエラーが表示されます。 –
'derived * dp = new derivedA();': 'derived'は型ではなく、' derivedA() 'は不正です:' derivedA <4, 5>() ' – hmjd