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

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

Шрифт:

// используем объект rect

for (int i=0; i<rect.size; ++i) rect[i].move(10,10);

Оператор new описан в главе 17, а реализация класса
Vector_ref
— в приложении Д. Пока достаточно знать, что мы можем использовать его для хранения неименованных объектов. За оператором new следует имя типа (в данном случае
Rectangle
) и, необязательно, список инициализации (в данном случае
(Point(50,60),Point(80,90))
).

Опытные программисты заметят, что в данном примере мы не допускаем утечки памяти. С помощью классов

Rectangle
и
Vector_ref
мы можем экспериментировать с цветами. Например, можем нарисовать простую диаграмму, состоящую из 256 цветов.

Vector_ref<Rectangle> vr;

for (int i = 0; i<16; ++i)

for (int j = 0; j<16; ++j) {

vr.push_back(new Rectangle(Point(i*20,j*20),20,20));

vr[vr.size–1].set_fill_color(Color(i*16+j));

win20.attach(vr[vr.size–1]);

}

Мы создали объект класса

Vector_ref
, состоящий из 256 объектов класса
Rectangle
, организованный в объекте класса
Window
в виде матрицы 16x16. Мы приписали объектам класса
Rectangle
цвета 0, 1, 2, 3, 4 и т.д. После создания каждого из объектов этого типа они выводятся на экран.

< image l:href="#"/>

13.11. Класс Text

Очевидно, что нам необходимо выводить на экран текст. Например, мы могли бы пометить “странный” объект класса

Closed_polyline
из раздела 13.8.

Text t(Point(200,200),"A closed polyline that isn't a polygon");

t.set_color(Color::blue);

В этом случае мы получим такое изображение.

В принципе объект класса

Text
определяет строку текста, начиная с точки, заданной объектом класса
Point
. Этот объект класса
Point
находится в левом нижнем углу текста. Мы ограничиваемся одной строкой, поскольку хотим, чтобы наша программа выполнялась на многих компьютерах. Не пытайтесь вставлять в окно символ перехода на новую строку. Для создания объектов класса
string
, подлежащих выводу на экран в объектах класса
Text
(см. примеры в разделах 12.7.7 и 12.7.8), очень полезны строковые потоки (см. раздел 11.4).

struct Text:Shape {

// точка в левом нижнем углу первой буквы

Text(Point x, const string& s)

:lab(s), fnt(fl_font), fnt_sz(fl_size)
{ add(x); }

void draw_lines const;

void set_label(const string& s) { lab = s; }

string label const { return lab; }

void set_font(Font f) { fnt = f; }

Font font const { return fnt; }

void set_font_size(int s) { fnt_sz = s; }

int font_size const { return fnt_sz; }

private:

string lab; // label

Font fnt;

int fnt_sz;

};

Класс

Text
имеет свою собственную функцию-член
draw_lines
, поскольку только он знает, как хранится его строка.

void Text::draw_lines const

{

fl_draw(lab.c_str,point(0).x,point(0).y);

}

Цвет символов определяется точно так же, как в фигурах, состоящих из линий (например,

Open_polyline
и
Circle
), поэтому можем выбирать новый цвет с помощью функции
set_color
, а определять текущий цвет — с помощью функции
color
. Размер и шрифт символов выбираются аналогично. В классе предусмотрено небольшое количество заранее определенных шрифтов.

  • Читать дальше
  • 1
  • ...
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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