Бьерн Страуструп - Язык программирования С++. Главы 11-13
Страница 38. Инкапсуляция



12.2.7.2 Инкапсуляция

Отметим, что в С++ класс, а не отдельный объект, является той
единицей, которая должна быть инкапсулирована (заключена в оболочку).
Например:

     class list {
         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::next допустимо, поскольку
list::on() имеет доступ ко всякому объекту класса list, на который
у него есть ссылка. Если это неудобно, ситуацию можно упростить,
отказавшись от возможности доступа через функцию-член к
представлениям других объектов, например:

     int list::on(list* p)
     {
         if (p == this) return  1;
         if (p == 0) return 0;
         return next->on(p);
     }

Но теперь итерация превращается в рекурсию, что может сильно
замедлить выполнение программы, если только транслятор
не сумеет обратно преобразовать рекурсию в итерацию.

 
« Предыдущая статья   Следующая статья »