C ++, как избежать переопределения виртуального метода из интерфейса - PullRequest
0 голосов
/ 09 апреля 2019

Я пришел из мира 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 ]

1 голос
/ 09 апреля 2019

Ваши дочерние классы выборочно переопределяют родительские методы. Вам нужно что-то вроде этого:

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

Короче говоря, здесь не может быть абстрактной базы.

1 голос
/ 09 апреля 2019

Есть ли шаблон, позволяющий избежать переопределения виртуальных методов?

Я не думаю, что для этого есть какая-то модель. Вам просто нужно убедиться, что все виртуальные функции-члены реализованы в самом производном классе или в одном из его родительских классов.

Тривиальная реализация не слишком сложна для ваших функций.

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
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...