Справочное руководство по C++

R.11.6 Доступ к виртуальным функциям.

Правила доступа (§R.11) к виртуальной функции определяются ее описанием и на них не влияют правила доступа к к функции, которая позднее будет подавлять ее. Приведем пример:

Class B {

Public:

 virtual f();

};

Class D: public B {

Private:

 f();

};

Void f().

{

 D d;

 B* pb = &d;

 D* pd = &d;

 pb-›f(); // нормально: B::f() общий член.

  // вызывается D::f().

 pd-›f(); // ошибка: D::f() частный член.

}

Права доступа проверяются при самом вызове, используя тип выражения, обозначающее объект, для которого вызывается функция-член (в примере выше это B*). Доступ к функции-члену в классе, где она определена (D в примере выше), в общем случае неизвестен.