用另一个纯虚拟方法覆盖一个纯虚拟方法是否有意义?是否存在功能上的差异,或者也许是代码风格的原因,因此更喜欢以下选项之一?
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] 删除。
我来说两句