-2
#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 都是从纯虚拟类基派生的,并且都有一个未实现的方法。不实施一种方法是否合法?不实施一种方法是可以接受的还是好的做法?有没有更好的方法?

编辑:我刚刚注意到这些类不是从基类派生的。我已经更改了代码,所以它确实如此。

4

2 回答 2

5

如果您从具有纯虚方法的类派生并且您没有在派生类中覆盖该方法,则该派生类也将是一个抽象类。如果这对您来说没问题(例如,您将进一步推导它),那么您可以这样做。如果您确实想实例化该派生类,则必须覆盖所有纯抽象方法

请注意,在您的示例中,您不是从抽象类派生的:base两者都是独立类。你需要:derivedAderivedB

class derivedA : public base {
  //...
};
于 2012-05-01T17:14:14.283 回答
1

不允许实例化任何具有纯虚成员函数的类。你当然可以有这样一个类,但它的任何实例都必须是所有纯虚都已定义的子类。

于 2012-05-01T17:13:41.617 回答