|
Программирование >> Дополнительные возможности наследования
в строках 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 (правый). Эти четыре па-
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |