Virtual private functions in C++
I’ve come across an interesting in my point of view bit of code. There was a virtual private function. The approach is odd at the first place and I thought it shouldn’t even compile, but surprisingly it did. I felt that this was yet another gap in my C++.
I wrote this code:
#include <iostream>
class A {
public:
void bar() { foo(); }
private:
virtual void foo() = 0;
};
class B: public A {
private:
virtual void foo() { std::cout << "B::foo()" << std::endl; }
};
int main(int argc, char* argv[]) {
A* a = new B();
a->bar();
delete a;
return 0;
}
VS2010 and GCC compile it perfectly and it prints out B::foo().
I have concluded that the virtual function mechanism usually implemented via vtable is runtime, but public/private is compile time, and they don’t depend on each other.
Original post | Disclaimer