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

R.13.1 Сопоставление описаний.

   


Назад  |  Вперёд

Два описания функций с одинаковыми именами относятся к одной и той же функции, если они находятся в одной области видимости и имеют идентичные типы параметров ($$R.13). Функция-член производного класса относится к иной области видимости, чем функция-член базового класса с тем же именем. Рассмотрим пример:

           class B {
           public:
             int f(int);
           };

           class D : public B {
           public:
             int f(char*);
           };

Здесь D::f(char*) скорее скрывает B::f(int), чем перегружает эту функцию.

           void h(D* pd)
           {
             pd->f(1);     // ошибка: D::f(char*) скрывает B::f(int)
             pd->B::f(1);  // нормально
             pd->f("Ben"); // нормально, вызов D::f
           }

Функция, описанная локально, находится в иной области видимости, чем функция с файловой областью видимости.

           int f(char*);
           void g()
           {
             extern f(int);
             f("asdf");  // ошибка: f(int) скрывает f(char*) поэтому
                         // в текущей области видимости нет f(char*)
           }

Для разных вариантов перегруженной функции-члена можно задать разные правила доступа, например:

           class buffer {
           private:
             char* p;
             int size;

           protected:
             buffer(int s, char* store) { size = s; p = store; }
             // ...

           public:
             buffer(int s) { p = new char[size = s]; }
           };

Назад  |  Вперёд


OtDiatlovaOU
К началу книги

Оформление и дизайн книги OtDiatlovaOU.
Вся книга, архив.