The following code may seem strange at first sight:
class Base
{
private:
virtual void f() = 0;
};
How can a pure virtual function be private? Will the derived class be able to override it? Actually, it's possible for pure virtual functions to have any access modifier:
private, protected, or
public. Moreover, you can also change their access levels when they're overridden in a derived class:
class Derived : public Base
{
public:
void f()
{
std::cout << "Overloaded public f() in Derived class\n";
}
};