logo
volkov / 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 в примере выше), в общем случае неизвестен.