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

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]; }.

};