不实施方法是否合法和良好做法

Is it legal and good practice to leave methods unimplemented?

本文关键字:是否 施方法 方法      更新时间:2023-10-16
#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 都派生自纯虚拟类库,并且都有一个未实现的方法。不实施一种方法是否合法?不实施一种方法是可以接受的还是好的做法?有没有更好的方法?

编辑:我刚刚注意到这些类不是从 base 派生的。我已经更改了代码,以便它这样做。

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

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

class derivedA : public base {
  //...
};

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