С++ для начинающих




Закрытые и открытые функции-члены


Функцию-член можно объявить в любой из секций public, private или protected тела класса. Где именно это следует делать? Открытая функция-член задает операцию, которая может понадобиться пользователю. Множество открытых функций-членов составляет интерфейс класса. Например, функции-члены home(), move() и get() класса Screen определяют операции, с помощью которых программа манипулирует объектами этого типа.

Поскольку мы прячем от пользователей внутреннее представление класса, объявляя его члены закрытыми, то для манипуляции объектами типа Screen необходимо предоставить открытые функции-члены. Такой прием – сокрытие информации – защищает написанный пользователем код от изменений во внутреннем представлении.

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

До сих пор мы встречались лишь с функциями, поддерживающими доступ к закрытым членам только для чтения. Ниже приведены две функции set(), позволяющие пользователю модифицировать объект Screen. Добавим их объявления в тело класса:

class Screen {

public:

   void set( const string &s );

   void set( char ch );

   // объявления других функций-членов не изменяются

};

Далее следуют определения функций:

void Screen::set( const string &s )

{ // писать в строку, начиная с текущей позиции курсора

   int space = remainingSpace();

   int len = s.size();

   if ( space < len ) {

      cerr << "Screen: warning: truncation: "

           << "space: " << space

           << "string length: " << len << endl;

      len = space;

   }

   _screen.replace( _cursor, len, s );

   _cursor += len - 1;

}

void Screen::set( char ch )

{

   if ( ch == '\0' )

      cerr << "Screen: warning: "

           << "null character (ignored).\n";




Содержание  Назад  Вперед