Глава 20. Наследование и полиморфизм___________________________557

class OWLCLASS TChordGauge : public TGauge

{

public:

TChordGauge(TWindow* parent, int x, int y, int w, int h = 0, int ticks = 0) :

TGauge(parent, 0, IDCJ30LIDGAUGE, x, у, w, h) {

this->ticks = ticks;

private:

int ticks;

};

Заметьте, что у нас только пять общих параметров с конструктором TGauge:

parent (это окно, которому принадлежит наш элемент управления), х и у (верхний левый угол прямоугольника, ограничивающего клиентскую область) и w и h (ширина и высота этого прямоугольника). В этом отношении мы отчасти упростили интерфейс нашего класса. Заметьте, также, что мы добавили свой собственный уникальный параметр, ticks, который указывает, на сколько равных отрезков должен быть поделен наш индикатор (в начале, в конце индикатора и между смежными секторами будут поставлены деления). Все, что делает наш конструктор — он сохраняет это значение в закрытом элементе данных под названием ticks, а все остальное делает TGauge. Вызывая конструктор TGauge, мы передаем ему без изменения параметры parent, координаты и размеры прямоугольника, ограничивающего клиентскую область (х, у, w и h), в качестве заголовка title передается о или NULL (поскольку в настоящее время мы его не используем) и в качестве аргумента id передается константа IDC_SOLIDGAUGE (это идентификатор ресурса OWL, указывающий, что TGauge будет построен со сплошной полосой). Теперь, если бы мы создали экземпляр нашего класса TChordGauge, мы получили бы один к одному индикатор типа TGauge; к нему добавлено только присваивание для ticks. Ценой одной-двух строк кода наш класс унаследовал всю функциональность класса TGauge.

Однако при создании экземпляра TChordGauge возникла бы небольшая проблема: на экране он выглядел бы в точности так же, как индикатор со сплошной полосой (рис. 20.5). Теперь нам предстоит сделать так, чтобы наш класс TChordGauge отображал себя на экране так, как показано на рис. 20.6. Для этого нам придется переопределить некоторые из функций TGauge.

Чтобы переопределить методы Paint и paintBorder класса TGauge, надо просто добавить их к определению нашего класса:

class OWLCLASS TChordGauge : public TGauge

{

public:

TChordGauge(TWindow* parent, int x, int y, int w, int h = 0,

int ticks = 0) :

TGauge(parent, 0, IDC_SOLIDGAUGE, x, y, w, h)