Язык программирования C++ от Страуструпа


.Узловые классы - часть 2


       "abort",

       (char*) 0);

     switch (cont.ask()) {

       case 0:  return;

       case 1:  break;

       case 2:  abort();

     }

  }

}

Обратим внимание на использование конструктора. Конструктор, как правило, нужен для узлового класса и часто это нетривиальный конструктор. Этим узловые классы отличаются от абстрактных классов, для которых редко нужны конструкторы.

Пользователь класса dialog_box ( а не только создатель этого класса) рассчитывает на сервис, представляемый его базовыми классами. В рассматриваемом примере предполагается, что существует некоторое стандартное размещение нового окна на экране. Если пользователь захочет управлять размещением окна, базовый для dialog_box класс window (окно) должен предоставлять такую возможность, например:

dialog_box cont("continue","try again","abort",(char*)0);

cont.move(some_point);

Здесь функция движения окна move() рассчитывает на определенные функции базовых классов.

Сам класс dialog_box является хорошим кандидатом для построения производных классов. Например, вполне разумно иметь такое окно, в котором, кроме нажатия клавиши или ввода с мышью, можно задавать строку символов (скажем, имя файла). Такое окно dbox_w_str строится как производный класс от простого окна dialog_box:

class dbox_w_str : public dialog_box {

  // ...

  public:

     dbox_w_str (

       const char* sl,             // строка запроса пользователю

       const char* ...             // список обозначений клавиш

     );

     int ask();

     virtual char* get_string();

     //...

};

Функция get_string() является той операцией, с помощью  которой программист получает заданную пользователем строку. Функция ask() из класса dbox_w_str гарантирует, что строка введена правильно, а если пользователь не стал вводить строку, то тогда в программу возвращается соответствующее значение (0).

void user2()

{

  // ...

  dbox_w_str file_name("please enter file name",

     "done",




- Начало -  - Назад -  - Вперед -