C ++如何避免从接口覆盖虚拟方法

时间:2019-04-09 16:56:18

标签: c++ oop inheritance virtual-method

我来自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
}

但是我有错误。 (我不能粘贴日志,因为我只有生产代码,而上面的代码只是实际问题的框架)。 有什么模式可以避免重写某些虚拟方法吗?

2 个答案:

答案 0 :(得分: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
};

答案 1 :(得分:1)

您的子类有选择地覆盖父方法。 您需要这样的东西:

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
        }
};

简而言之,您不能在此处建立抽象基础。