Программирование >>  Дополнительные возможности наследования 

1 ... 44 45 46 [ 47 ] 48 49 50 ... 265


в строках 18-29 в точности повторяется тело функции main() из листинга 6.4. Цель этого повторения - показать, что применение подставляемых вариантов функций не внесло изменений в использование этих функций.

Классы, содержащие gpgeue классы в качестве данных-членов

Нет ничего необычного в построении сложного класса путем объявления более простых классов и последующего включения их в объявление сложного класса. Например, можно объявить класс колеса, класс мотора, класс коробки передач и т.д., а затем объединить их в класс автомобиля. Тем самым объявляются и взаимоотношения между классами. Автомобиль имеет мотор, колеса и коробку передач.

Рассмотрим второй пример. Прямоугольник состоит из линий. Линия определяется двумя точками. Каждая точка определяется координатами х и у. В листинге 6.8 показано объявление класса Rectangle, которое содержится в файле RECTANGLE, hpp. Поскольку прямоугольник определяется четырьмя линиями, соединяющими четыре точки, и каждая точка имеет координаты на графике, то сначала будет объявлен класс Point для хранения координат X, у каждой точки. Листинг 6.9 содержит объявления обоих классов.

Япсшинг 6.8. ВОъявиЕНИЕ киассвв точки и нрвмоугонывка

2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

Начало файла Rect.hpp

#include <iostream.h>

class Point хранит координаты x,y

нет конструктора, используется конструктор по умолчанию public:

void SetX(int х) { itsX = х; } void SetY(int у) { itsY = у; > int GetXO const { return itsX;} int GetYO const { return itsY;} private:

int itsX; int itsY;

}; конец объявления класса Point

class Rectangle {

public:

Rectangle (int top, int left, int bottom, int right);;, Rectangle () {} [до вильц

int GetTopO const { return itsTop; } члг

int GetLeftO const { return itsLeft; } int GetBottomO const { return itsBottom; } int GetRightO const { return itsRight; >



28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55

Point GetUpperLeftO const { return itsUpperLeft; }

Point GetLowerLeftO const { return itsLowerLeft; >

Point GetUpperRightO const { return itsUpperRight; >

Point GetLowerRight() const { return itsLowerRight; }

void SetUpperLeft(Point Location) {itsUpperLeft = Location;}

void SetLowerLeft(Point Location) {itsLowerLeft = Location;}

void SetUpperRight(Point Location) {itsUpperRight = Location;}

void SetLowerRight(Point Location) {itsLowerRight = Location;}

void SetTop(int top) { itsTop = top; }

void SetLeft (int left) { itsLeft = left; }

void SetBottorn (int bottom) { itsBottom = bottom; }

void SetRight (int right) { itsRight = right; }

int GetAreaO const;

private:

Point itsUpperLeft; Point itsUpperRight; Point itsLowerLeft; Point itsLowerRight; int itsTop; int itsLeft; int itsBottom; int itsRight;

конец файла Rect.hpp

йисшиаг 6.9. Соуержвмос фа1ха ЯЕСТ. срр

2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18

Начало файла rect.cpp #include rect.hpp

Rectangle::Rectangle(int top, int left, int bottom, int right) {

itsTop = top; itsLeft = left; itsBottom = bottom; itsRight = right;

itsUpperLeft.SetX(left); itsUpperLeft.SetY(top);

itsUpperRight,SetXtright); itsUpperRight.SetY(top);

itsLowerLeft,SetX(left); itsLowerLeft.SetY(bottom);



19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44

itsLowerRight.SetX(right); itsLowerRight.SetY(bottom);

Вычисляем площадь прямоугольника, отыскивая его стороны, определяем его длину и ширину, а затем перемножаем их int Rectangle::QetArea() const {

int Width = itsRignt - itsLeft; int Height = itsTop - itsBottom; return (Width Height);

int main() {

инициализируем локальную переменную Rectangle Rectangle MyRectangle (100, 20, 50, 80 );

int Area = MyRectangle,GetAreaO;

cout Area; Area \n ; cout Upper Left X Coordinate: ; cout MyRectangle.GetUpperLeftO,GetXO; return 0;

, t?*; Area; 3000 Uppar Left X Coordinate: 20

В строках 3-14 листинга 6,8 объявляется класс Point, который используется для хранения конкретных координат х,у на графике, В данной программе класс Point практически не используется. Однако в других методах рисования он незаменим.

Внутри объявления класса Point (в строках 12 и 13) объявляются две переменные-члена (itsX и itsY). Эти переменные хранят значения координат точки. При увеличении координаты X мы перемещаемся на фафике вправо. При увеличении координаты у мы перемещаемся на графике вверх, В других фафиках могут использоваться другие системы координат (с другой ориентацией). Например, в некоторых профаммах посфоения окон значение координаты у увеличивается при перемещении в области окна вниз,

В классе Point используются подставляемые inllne-функции доступа, предназначенные для чтения и установки координат точек X и У, Эти функции объявляются в строках 7-10, В объектах класса Point используются стандартные конструктор и деструктор, предоставляемые компилятором по умолчанию. Следовательно, координаты точек должны устанавливаться в профамме,

В строке 17 начинается объявление класса Rectangle, который включает четыре точки, представляющие углы прямоугольника,

Консфуктор класса Rectangle принимает четыре целочисленных параметра, именуемых top (верхний), left (левый), bottom (нижний) и right (правый). Эти четыре па-



1 ... 44 45 46 [ 47 ] 48 49 50 ... 265

© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика