Consider following code:
class A {
public:
virtual void f() const = 0;
void callf() const { f(); }
};
class B : public A {
virtual void f() const { }
};
int main()
{
B x;
x.callf();
return 0;
}
Class B
derives from the abstract base class A
, but "hides" the implemented method f()
as private member.
Still, the inherited member callf()
is able to call f()
, which was public in the base class.
The code compiles with no warning on g++ 10.1.0 and clang++ 11.1.0.
Is this a legal code, i.e., does the inherited callf()
correctly see the private member f()
?
Alternatively, would it be possible for the derived class B
to implement the purely virtual methods of the base class, such that they can only be called by B
(and friends)?