Вот как это делается - основываясь на вашем описании:
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те случаи, в которых один и тот же метод доступен из одних и тех же подклассов из нескольких путей наследования, являются «ромбовидным шаблоном», и вы можете прочитать об этом здесь .