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);
           }

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


Назад  |  Вперёд


OtDiatlovaOU
К началу книги

Оформление и дизайн книги OtDiatlovaOU.
Вся книга, архив.