Программирование. Принципы и практика использования C++ Исправленное издание, стр. 189

Функция
add()attach()Windowadd()attach()Windowvoid f(Simple_window& w){ Rectangle r(Point(100,200),50,30); w.attach(r);} // Ой, объекта r больше нетint main(){ Simple_window win(Point(100,100),600,400,"Мое окно"); // ... f(win); // возникают проблемы // ... win.wait_for_button();}
f()wait_for_button()rwait_for_button()Vector_refОбратите внимание на то, что если бы мы объявили функцию
f()Windowattach(r)const Windowattach()Windowr14.1.4. Изменяемость
Основные вопросы, на которые следует ответить, проектируя классы, звучат так: кто может модифицировать данные и как он может это делать? Мы должны гарантировать, что изменение состояния объекта будет осуществляться только членами его класса. Именно для этого предназначены разделы
publicprivateprotectedlabelstringlabelstruct Circle { // ...private: int r; // radius};Circle c(Point(100,200),50);c.r = –9; // OK? Нет — ошибка компилирования: переменная Circle::r // закрытаКак указано в главе 13, мы решили предотвратить прямой доступ к большинству данных-членов класса. Это дает нам возможность проверять “глупые” значения, например отрицательные радиусы у объектов класса
CircleМы интерпретируем экран (т.е. совокупность объектов класса
Window14.2. Класс Shape
Класс
ShapeWindow• Понятие, которое связывает графические объекты с нашей абстракцией
Window• Класс, работающий с цветом и стилем, используемыми при рисовании линий. Для этого он хранит члены классов
Line_styleColor• Может хранить последовательности объектов класса Point и информацию о том, как их рисовать.
Опытные проектировщики отметят, что класс, обладающий только этими тремя свойствами, может иметь недостаточно общий характер. Однако мы описываем решение, которое очень далеко от общего.
Сначала опишем полный класс, а затем подробно его обсудим.
class Shape { // работает с цветом и стилем, хранит последователь - // ность точекpublic: void draw() const; // работает с цветом и рисует линии virtual void move(int dx, int dy); // перемещает фигуры +=dx // и +=dy void set_color(Color col); Color color() const; void set_style(Line_style sty); Line_style style() const;