Бьерн Страуструп - Язык программирования С++. Главы 5-8
Страница 4. Классы



5.2.2 Классы

Мы определили несколько функций для работы со структурой date, но из ее
описания не следует, что это единственные функции, которые
предоставляют доступ к объектам типа date. Можно установить такое
ограничение, описав класс вместо структуры:

           class date {
              int month, day, year;
           public:
              void set(int, int, int);
              void get(int*, int*, int*);
              void next();
              void print()
           };

Служебное слово public (общий) разбивает описание класса на две части.
Имена, описанные в первой частной (private) части класса, могут
использоваться только в функциях-членах. Вторая - общая часть -
представляет собой интерфейс с объектами класса. Поэтому структура - это
такой класс, в котором по определению все члены являются общими.
Функции-члены класса определяются и используются точно так же, как
было показано в предыдущем разделе:

           void date::print()     // печать даты  в принятом в США виде
           {
             cout << month << '/' << day << '/' << year ;
           }

Однако от функций не членов частные члены класса date уже ограждены:

           void backdate()
           {
             today.day--;    // ошибка
           }

Есть ряд преимуществ в том, что доступ к структуре данных ограничен
явно указанным списком функций. Любая ошибка в дате (например,
December, 36, 1985) могла быть внесена только функцией-членом,
поэтому первая стадия отладки - локализация ошибки - происходит
даже до первого пуска программы. Это только частный случай общего
правила: любое изменение в поведении типа date может и должно
вызываться изменениями в его членах. Другое преимущество в том, что
потенциальному пользователю класса для работы с ним достаточно
знать только определения функций-членов.
    Защита частных данных основывается только на ограничении
использования имен членов класса. Поэтому ее можно обойти с
помощью манипуляций с адресами или явных преобразований типа,
но это уже можно считать мошенничеством.

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