C ++ наследование подкласса - PullRequest
0 голосов
/ 02 июня 2018

Хорошо, это может быть глупый вопрос, но я не могу понять, как решить мою проблему.

Давайте предположим, что у нас есть 4 класса

  1. класс A является базовым классом
  2. класс B получен из A с новыми методами (без переопределения)
  3. класс C получен из A
  4. класс D получен из B (а также из A для наследования))

мой вопрос: как мне использовать метод, определенный в B в D?Если D наследует от BI, получается «ошибка: элемент« xxx »найден в нескольких базовых классах разных типов», если D не наследуется от BI, «используется необъявленный идентификатор»

1 Ответ

0 голосов
/ 02 июня 2018

Вот как это делается - основываясь на вашем описании:

class A {
protected:
    void foo();
};

class B : public A {
protected:
    void bar();
};

class D : public B {
protected:
    void baz() { B::bar(); }
};

Обратите внимание, что вы должны , а не иметь D наследовать от A напрямую, за исключением очень специфических и редких случаев.Наследование является переходным.

Кроме того, в следующий раз, пожалуйста, опубликуйте пример Minimal, Complete and Verifiable и не заставляйте нас угадывать, что именно вы имеете в виду.

INте случаи, в которых один и тот же метод доступен из одних и тех же подклассов из нескольких путей наследования, являются «ромбовидным шаблоном», и вы можете прочитать об этом здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...