C ++如何避免从接口覆盖虚拟方法
Posted
技术标签:
【中文标题】C ++如何避免从接口覆盖虚拟方法【英文标题】:C++ how to avoid overriding virtual method from interface 【发布时间】:2019-04-09 16:56:17 【问题描述】:我来自 JVM 世界,我尝试用 c++ 实现一些东西。
我有一个界面:
class MyInterface
public:
virtual void my_method(std::string i) = 0;
virtual void my_method(int i) = 0;
;
我想要两个子类 A 和 B:
class AClass: public MyInterface
public:
void my_method(std::string i); // And implement only that method in .c file
B 类:
public BClass: public MyInterface
public:
void my_method(int i); // And implement only that method in .c file
但我得到了错误。 (我不能粘贴日志,因为我只有生产代码,上面的代码只是真正问题的脚手架)。 有什么模式可以避免覆盖一些虚方法吗?
【问题讨论】:
当有人myAInstance.my_method(1);
时你想发生什么?还是myBInstance.my_method("X");
?那么myInterfaceObject.my_method(1)
呢?
@user 你宁愿想要一个抽象类实现(具有默认行为)而不是一个纯虚拟接口吗?
【参考方案1】:
有什么模式可以避免覆盖一些虚方法吗?
我认为这没有任何模式。您只需确保所有虚拟成员函数都在最派生类或其父类之一中实现。
对于你拥有的功能来说,一个简单的实现并不难。
class AClass: public MyInterface
public:
void my_method(std::string i); // And implement only that method in .c file
void my_method(int i) // That's all you need
;
【讨论】:
【参考方案2】:您的子类选择性地覆盖父方法。 你需要这样的东西:
class MyInterface // Consider a different name
public:
virtual void my_method(std::string i)
// Business Logic . Let child 1 override this
virtual void my_method(int i)
// Business Logic . Let child 2 override this
;
简而言之,这里不能有抽象的基础。
【讨论】:
这个问题显然是要覆盖方法。 @MaxLanghof 嗯。改变了解决方案。以上是关于C ++如何避免从接口覆盖虚拟方法的主要内容,如果未能解决你的问题,请参考以下文章