[class.access.virt]
11 Classes [class]
11.8 Member access control [class.access]
11.8.6 Access to virtual functions [class.access.virt]
The access rules ([class.access]) for a virtual function are determined by its declaration and are not affected by the rules for a function that later overrides it.
[Example 1: class B { public: virtual int f(); }; class D : public B { private: int f(); }; void f() { D d; B* pb = &d; D* pd = &d; pb->f(); pd->f(); } — end example]