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.