Как устроены защищённые члены...182
Добавление в класс ключевого слова public делает все находящиеся за ним члены класса открытыми, а значит, доступными для функций — не членов класса. Использовав ключевое слово protected, вы делаете все последующие члены класса защищёнными, т.е. недоступными для функций, которые не являются членами класса. Переключаться между защищёнными и открытыми членами класса можно сколько угодно раз.
Допустим, у нас есть класс Student. В приведённом ниже примере представлены все необходимые возможности, которые нужны классу, описывающему студента ( за исключением разве что функций spendMoney ( тратить деньги ) и drinkBeer ( пить пиво ), которые тоже являются свойствами студента ):
addCourse ( int hours , float grade ) — добавить пройденный курс;
grade ( ) — вернуть текущую среднюю оценку;
hours ( ) — вернуть количество прослушанных часов.
Оставшиеся члены класса Student можно объявить как защищённые, чтобы другие функции не могли "лезть" во внутренние дела класса Student.
class Student
{
public :
/* grade — возвращает текущую среднюю оценку */
float grade( )
{
return gpa ;
}
/* hours — возвращает количество прослушанных часов */
int hours( )
{
return semesterHours ;
}
/* addCourse — добавляет к записи студента прослушанный курс */
float addCourse( int hours , float grade )
/* Приведённые ниже члены недоступны для внешних функций */
protected :
int semesterHours ; /* Количество прослушанных часов */
float gpa ; /* Средняя оценка */
} ;
_________________
182 стр. Часть 3. Введение в классы
Теперь члены semesterHours и gpa доступны только из других членов класса Student, и приведённый ниже пример работать не будет.
Student s ;
int main( int argc , char* pArgs[ ] )
{
/* Повысим свой рейтинг ( но не слишком сильно, иначе никто не поверит ) */
s.gpa = 3.5 ; /* Вызовет ошибку при компиляции */
float gpa = s.grade( ) ; /* Эта открытая функция считывает значение переменной, но вы не можете непосредственно изменить её значение извне */
return 0 ;
}
При попытке этой программы изменить значение gpa на этапе компиляции будет выдано сообщение об ошибке.
«Считается признаком хорошего тона не полагаться на значение защиты по умолчанию, а определить в самом начале объявления класса ключевое слово public или private. Обычно класс начинают описывать с открытых членов, формируя интерфейс класса. Описание защищённых членов класса выполняется позже.»
[Советы]
«Члены класса могут быть защищены с помощью ещё одного ключевого слова — private. Кстати, по умолчанию при описании класса его члены считаются описанными именно как private. Разница между protected и private станет ясной при изучении наследования.»
[Технические подробности]
Больше книг — больше знаний!
Заберите 20% скидку на все книги Литрес с нашим промокодом
ПОЛУЧИТЬ СКИДКУ