Бьерн Страуструп - Язык программирования С++. Главы 11-13 - Инкапсуляция
ОГЛАВЛЕНИЕ
Страница 39 из 62
12.2.7.2 Инкапсуляция
Отметим, что в С++ класс, а не отдельный объект, является той единицей, которая должна быть инкапсулирована (заключена в оболочку). Например:class list {Здесь обращение к частному указателю list::next допустимо, поскольку
list* next;
public:
int on(list*);
};
int list::on(list* p)
{
list* q = this;
for(;;) {
if (p == q) return 1;
if (q == 0) return 0;
q = q->next;
}
}
list::on() имеет доступ ко всякому объекту класса list, на который у него есть ссылка. Если это неудобно, ситуацию можно упростить, отказавшись от возможности доступа через функцию-член к представлениям других объектов, например:
int list::on(list* p)Но теперь итерация превращается в рекурсию, что может сильно замедлить выполнение программы, если только транслятор не сумеет обратно преобразовать рекурсию в итерацию.
{
if (p == this) return 1;
if (p == 0) return 0;
return next->on(p);
}