C ++用纯虚方法重写纯虚方法

富O猫头鹰

用另一个纯虚拟方法覆盖一个纯虚拟方法是否有意义?是否存在功能上的差异,或者也许是代码风格的原因,因此更喜欢以下选项之一?

class Interface {
 public:
  virtual int method() = 0;
};

class Abstract : public Interface {
 public:
  int method() override = 0;
};

class Implementation : public Abstract {
 public:
  int method() override { return 42; }
};

相对:

class Interface {
 public:
  virtual int method() = 0;
};

class Abstract : public Interface {};

class Implementation : public Abstract {
 public:
  int method() override { return 42; }
};
克里斯多夫

两种代码产生相同的效果:类Abstract是抽象的,您不能实例化它。

但是,两种形式在语义上有所不同:

  • 第一种形式清楚地提醒该类Abstract是抽象以防万一它的名字说不出来的;-))。它不仅提醒它:还通过确保方法是纯虚拟的来确保它。
  • 第二种形式表示该类Abstract完全继承自Interface当且仅当它的基类是,它才是抽象的。

这会对代码的未来发展产生影响。例如,如果有一天您改变主意并希望接口具有以下默认实现method()

  • 第一种形式Abstract仍然是抽象的,并且不会继承该方法的默认实现。
  • 第二种形式可确保Abstract将继续继承和行为Interface

我个人认为第二种形式更直观,可以确保更好地分离关注点。但是我可以想象,在某些情况下第一种形式确实很有意义。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++ 11构造函数继承和纯虚方法

来自分类Dev

C ++中的虚方法重写

来自分类Dev

C ++在实现的纯虚方法中自动从父抽象类调用检查方法吗?

来自分类Dev

C ++纯虚函数调用的性能差异

来自分类Dev

奇怪的行为C ++纯虚函数

来自分类Dev

D中的C ++ DLL(纯虚函数)

来自分类Dev

C ++ 11中的纯虚函数

来自分类Dev

D中的C ++ DLL(纯虚函数)

来自分类Dev

奇怪的行为C ++纯虚函数

来自分类Dev

关于纯虚函数的C ++设计原理?

来自分类Dev

使用纯虚函数定义在C ++类之外?

来自分类Dev

C ++ 11线程,错误调用了纯虚函数

来自分类Dev

C ++标准库中是否有纯虚函数?

来自分类Dev

C ++将基本类型传递给纯虚函数

来自分类Dev

C ++:通过调用纯虚函数避免重复

来自分类Dev

使用纯虚函数在C ++类之外定义?

来自分类Dev

具有纯虚函数的模板类的C ++语法?

来自分类Dev

在线程中调用纯虚方法

来自分类Dev

多态性,虚方法,C ++

来自分类Dev

C ++在Mult中调用正确的虚方法

来自分类Dev

从派生的模板类重写纯虚函数

来自分类Dev

从模板化类重写纯虚函数

来自分类Dev

如何将C ++类转换为托管类并在其中调用纯虚函数?

来自分类Dev

C ++:从同一类的成员函数调用纯虚函数

来自分类Dev

将主体添加到C ++中的纯虚/抽象函数中?

来自分类Dev

C++11 中默认纯虚析构函数的正确放置

来自分类Dev

C++用抽象类作为参数覆盖虚方法

来自分类Dev

如何在C#中使用返回类型定义虚方法的虚方法

来自分类Dev

我可以在基类中重载纯虚方法吗?