Программирование на C и C++

Онлайн справочник программиста на C и C++

Дополнительная спецификация доступа при наследовании

При наследовании базового класса с ключевым словом private все его элементы, включая общедо­ступные члены, становятся частными элементами производного класса. Однако в определенных случаях может потребоваться, чтобы определенные общедоступные элементы базового класса со­хранили свой статус общедоступных в производном классе. Для этого используется объявление доступа. Оно имеет следующую общую форму:

имя_базового_класса:: элемент;

Объявление доступа помещается над подходящим заголовком при объявлении производного класса. Ниже представлен пример, иллюстрирующий использование объявления доступа:

#include <iostream.h>
class B_class {
public:
int i, j;
};
class D_class : private B_class {
public:
// объявление доступа
B_class::i; // i из B_class теперь опять публичный
int k;
};
int main{)
{
D_class d;
d.i = 10/ // допустимо, поскольку i сделан в D_class публичным
d.k = 20;
// d.j = 30; // недопустимо, поскольку j в D_class является частным
cout << d.i * d.k;
return 0;
}

В этом примере класс B_class наследует класс D_class с ключевым словом private. Это означает, что члены i и j становятся частными членами класса D_class. Однако в классе D_class объявление доступа указывает, что член i снова становится общедоступным.

Также можно использовать объявление доступа для того, чтобы предоставить защищенным членам базового класса статус защищенных в производном классе. Однако следует иметь в виду, что нельзя повысить доступ члена. Например, частный элемент базового класса не может стать публичным элементом производного класса.