Чтение онлайн

на главную - закладки

Жанры

Освой самостоятельно С++ за 21 день.

Либерти Джесс

Шрифт:

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

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

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

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

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

Листинг 6.8. Объявление классов точки и прямоугольника

1: // Начало файла Rect.hpp

2: #include <iostream.h>

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

4: {

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

6: public:

7: void SetX(int x) { itsX = x; >

8: void SetY(int у) { itsY = у; }

9: int GetX const < return itsX;}

10: int GetY const { return itsY;}

11: private:

12: int itsX;

13: int itsY;

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

15:

16:

17: class Rectangle

18: {

19: public:

20: Rectangle(int top, int left, int bottom, int right):.;

21: ~Rectangle {}

22:

23: int GetTop const { return itsTop; }

24: int GetLeft const { return itsLeft; }

25: int GetBottom const { return itsBottom; }

26: int GetRight const { return itsRight; }

27:

28: Point GetUpperLeft const { return itsUpperLeft; }

29: Point GetLowerLeft const { return itsLowerLeft; }

30: Point GetUpperRight const { return itsUpperRight; }

31: Point GetLowerRight const { return itsLowerRight; }

32:

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

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

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

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

37:

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

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

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

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

42:

43: int GetArea const;

44:

45: private:

46: Point itsUpperLeft;

47: Point itsUpperRight;

48: Point itsLowerLeft;

49: Point itsLowerRight;

50: int itsTop;

51: int itsLeft;

52: int itsBottom;

53: int itsRight;

54: };

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

Листинг 6.9. Содержимое файла RECT.cpp

1: // Начало файла rect.cpp

2: #include "rect.hpp"

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

4: {

5: itsTop = top;

6: itsLeft = left;

7: itsBottom = bottom;

8: itsRight = right;

9:

10: itsUpperLeft.SetX(left);

11: itsUpperLeft.SetY(top);

12:

13: itsUpperRight.SetXtright);

14: itsUpperRight.SetY(top);

15:

16: itsLowerLeft.SetX(left);

17: itsLowerLeft.SetY(bottom);

18:

19: itsLowerRight.SetX(right);

20: itsLowerRight.SetY(bottom);

21: }

22:

23:

24: // Вычисляем площадь прямоугольника, отыскивая его стороны

25: // определяем его длину и ширину, а затем перемножаем их

26: int Rectangle::GetArea const

27: {

28: int Width = itsRignt - itsLeft;

29: int Height = itsTop - itsBottom;

30: return (Width >> Height);

31: }

32:

33: int main

34: {

35: //инициализируем локальную переменную Rectangle

36: Rectangle MyRectangle (100, 20, 50, 80 );

37:

38: int Area = MyRectangle.GetArea;

39:

40: cout << "Area: " << Area << "\n";

41: cout << "Upper Left X Coordinate:";

42: cout << MyRectangle.GetUpperLeft.GetX;

43: return 0;

44: }

Результат:

Area: 3000

Upper Left X Coordinate: 20

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

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

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

Хозяйка лавандовой долины

Скор Элен
2. Хозяйка своей судьбы
Любовные романы:
любовно-фантастические романы
6.25
рейтинг книги
Хозяйка лавандовой долины

Элита элит

Злотников Роман Валерьевич
1. Элита элит
Фантастика:
боевая фантастика
8.93
рейтинг книги
Элита элит

Покоритель Звездных врат

Карелин Сергей Витальевич
1. Повелитель звездных врат
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Покоритель Звездных врат

Толян и его команда

Иванов Дмитрий
6. Девяностые
Фантастика:
попаданцы
альтернативная история
7.17
рейтинг книги
Толян и его команда

Черный маг императора

Герда Александр
1. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Черный маг императора

Пистоль и шпага

Дроздов Анатолий Федорович
2. Штуцер и тесак
Фантастика:
альтернативная история
8.28
рейтинг книги
Пистоль и шпага

Лорд Системы

Токсик Саша
1. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
4.00
рейтинг книги
Лорд Системы

Месть Паладина

Юллем Евгений
5. Псевдоним `Испанец`
Фантастика:
фэнтези
попаданцы
аниме
7.00
рейтинг книги
Месть Паладина

Невеста на откуп

Белецкая Наталья
2. Невеста на откуп
Фантастика:
фэнтези
5.83
рейтинг книги
Невеста на откуп

Любовь Носорога

Зайцева Мария
Любовные романы:
современные любовные романы
9.11
рейтинг книги
Любовь Носорога

На грани развода. Вернуть любовь

Невинная Яна
2. Около развода. Второй шанс на счастье
Любовные романы:
современные любовные романы
5.00
рейтинг книги
На грани развода. Вернуть любовь

Чужая дочь

Зика Натаэль
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Чужая дочь

Прометей: каменный век

Рави Ивар
1. Прометей
Фантастика:
альтернативная история
6.82
рейтинг книги
Прометей: каменный век

Мимик нового Мира 10

Северный Лис
9. Мимик!
Фантастика:
юмористическое фэнтези
альтернативная история
постапокалипсис
рпг
5.00
рейтинг книги
Мимик нового Мира 10