Вход/Регистрация
Программирование. Принципы и практика использования C++ Исправленное издание
вернуться

Страуструп Бьерн

Шрифт:

enum Line_style_type {

solid=FL_SOLID, // -------

dash=FL_DASH, // - - - -

dot=FL_DOT, // .......

dashdot=FL_DASHDOT, // - .
– .

dashdotdot=FL_DASHDOTDOT, // -..-..

};

Line_style(Line_style_type ss):s(ss), w(0) { }

Line_style(Line_style_type lst, int ww):s(lst), w(ww) { }

Line_style(int ss):s(ss), w(0) { }

int width const { return w; }

int style const { return s; }

private:

int s;

int w;

};

Методы программирования, использованные для определения класса

Line_style
, ничем не отличаются от методов, использованных для класса
Color
. Здесь мы снова скрываем тот факт, что для представления стилей линии библиотека FKTK использует тип
int
. Почему стоит скрывать эту информацию? Потому что эти способы представления при модификации библиотеки могут измениться. В следующей версии библиотеки FLTK может появиться тип
Fl_linestyle
, да и мы сами можем перенастроить наш интерфейс на другую библиотеку. В любом случае не стоит замусоривать свой код переменными типа
int
только потому, что мы знаем, как они задают стиль линий.

Как правило, мы не заботимся о стиле вообще; мы просто полагаемся на параметры, заданные по умолчанию (сплошные линии, ширина которых задана по умолчанию). Если мы не указываем ширину линии явно, то она задается конструктором. Установка значений по умолчанию — это одно из предназначений конструктора, а правильно выбранные значения, задаваемые по умолчанию, могут значительно облегчить работу пользователей.

Класс

Line_style
состоит из двух “компонентов”: характеристики стиля (например, пунктирные или сплошные линии) и ширины (толщина линий). Ширина измеряется в целых числах. По умолчанию ширина равна единице. Если нам нужна более широкая линия, то ее толщину можно задать следующим образом:

grid.set_style(Line_style(Line_style::dash,2));

В итоге получим следующее изображение:

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

Lines
,
Open_polyline
или
Polygon
. Если мы хотим управлять цветом или стилем линий по отдельности, то их следует задать как отдельные объекты класса
Line
. Рассмотрим пример.

horizontal.set_color(Color::red);

vertical.set_color(Color::green);

На экране откроется окно, приведенное ниже.

13.6. Класс Open_polyline

Класс

Open_polyline
определяет фигуру, состоящую из ряда отрезков линий, соединенных между собой и заданных последовательностью точек. Слово
poly
имеет греческое происхождение и означает “много”, а
polyline
— это удобное имя для фигуры, состоящей из многих линий. Рассмотрим пример.

Open_polyline opl;

opl.add(Point(100,100));

opl.add(Point(150,200));

opl.add(Point(250,250));

opl.add(Point(300,200));

Этот фрагмент кода создает фигуру, которую можно нарисовать, соединяя следующие точки.

В принципе

Open_polyline
— это выдуманное слово, которое мы позаимствовали из детской игры “Connect the Dots” (“Соедини точки”).

Класс

Open_polyline
определен следующим образом:

struct Open_polyline:Shape { // открытая последовательность линий

void add(Point p) { Shape::add(p); }

};

Да-да, это все определение. В нем практически ничего нет, кроме указания имени класса и того факта, что он является наследником класса

Shape
. Функция
add
класса
Open_polyline
просто позволяет пользователям получить доступ к функции
add
из класса
Shape
(т.е.
Shape::add
). Нам даже не нужно определять функцию
draw_lines
, так как класс
Shape
по умолчанию интерпретирует добавленные точки как последовательность линий, соединенных друг с другом.

13.7. Класс Closed_polyline

Класс

Closed_polyline
похож на класс
Open_polyline
, за исключением того, что последняя точка соединяется с первой. Например, можно было бы создать объект класса
Closed_polyline
из тех же точек, из которых был построен объект класса
Open_polyline
в разделе 13.6.

Closed_polyline cpl;

cpl.add(Point(100,100));

cpl.add(Point(150,200));

  • Читать дальше
  • 1
  • ...
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: