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

We use cookies. Read the Privacy and Cookie Policy

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