Могу ли я каким-то образом создать новый метод подкласса в C ++ с тем же именем, что и виртуальный метод в базовом классе, но с остановкой наследования?
Позвольте мне объяснить это более подробно, рассмотрим этот код:
#define L(m) std::cout << m << std::endl;
class A {
public:
virtual void func() { L("A::func"); };
virtual void func2() { L("A::func2"); };
};
class B: public A {
public:
void func() { L("B::func"); }; //implements A::func
void func2(){ L("B::func2"); }; //implements A::func2
};
class C: public A {
public:
void func2() { L("C::func2"); }; //implements A::func2
void func() { L("C::func"); }; //meant to declare a new function but accidentally overrides A::func
};
Я не хочу объявлять func
окончательным в A
(я знаю, что это остановит наследование, но мне это нужно для класса B
).
Также я хочу позвонить в C::func2
с помощью A
:
C c;
A* a = &c;
a->func2(); //must use C::func2 (standard inheritance)
a->func(); //must use A::func !!! (possible?)
c.func2(); //must use C::func2
c.func(); //must use C::func
Очевидно, я могу переименовать C в func
на что-нибудь другое, но в любом случае, возможно ли это каким-то образом без полного нарушения норм C ++?