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

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

Жанры

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

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

Шрифт:

Листинг 10.1. Перегрузка функций-членов

1: //Листинг 10.1. Перегрузка функций-членов

2: #include <iostream.h>

3:

4: int

5: // Обьявление класса Rectangle

6: class Rectangle

7: {

8: public:

9: // конструкторы

10: Rectangle(int width, int height);

11: ~Rectangle{ }

12:

13: // перегрузка функции-члена класса DrawShape

14: void OrawShape const;

15: void DrawShape(int aWidth, int aHeight) const;

16:

17: private:

18: int itsWidth;

19: int itsHeight;

20: };

21:

22: //

Применение конструктора

23: Rectangle::Rectangle(int width, int height)

24: {

25: itsWidth = width;

26: itsHeight = height;

27: }

28:

29:

30: // Перегруженная функция DrawShape - вариант без передачи данных

31: // Создание прямоугольника по значениям, заданным по умолчанию

32: void Rectangle::DrawShape const

33: {

34: DrawShape( itsWidth, itsHeight);

35: }

36:

37:

38: // Перегруженная функция DrawShape - передача двух значений

39: // Создание прямоугольника по значениям, переданным с параметрами

40: void Rectangle:;DrawShape(int width, int height) const

41: {

42: for (int i = 0; i<height; i++)

43: {

44: for (int j = 0; j< width; j++)

45: {

46: cout << "<<";

47: }

48: cout << "\n";

49: }

50: }

51:

52: // Выполняемая программа, демонстрирующая использование перегруженных функций

53: int main

54: {

55: // создание прямоугольника с размерами 30 и 5

56: Rectangle theRect(30,5);

57: cout << "DrawShape: \n";

58: theRect.DrawShape;

59: cout << "\nDrawShape(40,2): \n";

60: theRect.DrawShape(40,2);

61: return 0;

62: }

Результат:

DrawShape:

******************************

******************************

******************************

******************************

******************************

DrawShape(40,2):

****************************************

****************************************

Анализ: Листинг 10.1 представляет собой усеченную версию проекта, рассмотренного в главе подведения итогов за первую неделю. Чтобы сократить размер программы, был удален блок контроля за соответствием значений заданным типам. Основной код был упрощен до простой выполняемой программы без показа пользовательского меню.

Сейчас для нас важны строки 14 и 15, где происходит перегрузка функции DrawShape. Использование перегруженных вариантов

этой функции показано далее, в строках с 30 по 50. Обратите внимание, что версия функции DrawShape без параметров обращается к варианту функции, содержащей два параметра, и передает в нее текущие значения переменных-членов. При программировании всегда следует избегать дублирования одинаковых программных кодов. В противном случае придется держать в памяти все созданные копии функций, чтобы при изменении программного кода в одной из них внести соответствующие изменения во все копии.

В строках программы с 52 по 62 создается прямоугольный объект и вызывается функция DrawShape. В первый раз в функцию не передаются параметры, а во второй раз передается два значения типа unsigned short integer.

Компилятор выбирает правильное объявление функции по количеству и типу заданных параметров. Дополнительно можно задать в этой же программе еще одно объявление функции DrawShape, в параметрах которой будет одно значение размера и переменная перечисления, позволяющая пользователю указать, что обозначает данный размер — ширину или длину прямоугольника.

Использование значений, заданных по умолчанию

Функции-члены класса, подобно обычным функциям, могут использовать значения, заданные по умолчанию. При объявлении функций-членов с аргументами, задаваемыми по умолчанию, используется уже знакомый вам синтаксис, как показано в листинге 10.2

Листинг 10.2. Использование значений, заданных по умолчанию

1: //Листинг 10.2. Использование значений, заданных по умолчанию

2: #include <iostream.h>

3:

4: int

5:

6: // Объявление класса Rectangle

7: class Rectangle

8: {

9: public:

10: // конструкторы

11: Rectangle(int width, int height);

12: ~Rectangle { }

13: void DrawShape(int aWidth, int aHeight, bool UseCurrentVals = false) const;

14:

15: private:

16: int itsWidth;

17: int itsHeight;

18: };

19:

20: //Применение конструктора

21: Rectangle::Rectangle(int width, int height):

22: itsWidth(width), // инициализация

23: itsHeight(height)

24: { } // пустое тело

25:

26:

27: // для третьего параметра используются значения по умолчанию

28: void Rectangle::DrawShape(

29: int width,

30: int height,

31: bool UseCurrentValue

32: ) const

33: {

34: int printWidth;

35: int printHeight;

36:

37: if (UseCurrentValue == true)

38: {

39: printWidth = itsWidth; // используется значение текущего класса

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

Он тебя не любит(?)

Тоцка Тала
Любовные романы:
современные любовные романы
7.46
рейтинг книги
Он тебя не любит(?)

Завещание Аввакума

Свечин Николай
1. Сыщик Его Величества
Детективы:
исторические детективы
8.82
рейтинг книги
Завещание Аввакума

Курсант: Назад в СССР 10

Дамиров Рафаэль
10. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: Назад в СССР 10

Идеальный мир для Лекаря 12

Сапфир Олег
12. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 12

Мастер 4

Чащин Валерий
4. Мастер
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Мастер 4

(Бес) Предел

Юнина Наталья
Любовные романы:
современные любовные романы
6.75
рейтинг книги
(Бес) Предел

Шведский стол

Ланцов Михаил Алексеевич
3. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Шведский стол

Измена. Не прощу

Леманн Анастасия
1. Измены
Любовные романы:
современные любовные романы
4.00
рейтинг книги
Измена. Не прощу

Купец V ранга

Вяч Павел
5. Купец
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Купец V ранга

Новый Рал 9

Северный Лис
9. Рал!
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Новый Рал 9

Законы Рода. Том 2

Flow Ascold
2. Граф Берестьев
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 2

Вор (Журналист-2)

Константинов Андрей Дмитриевич
4. Бандитский Петербург
Детективы:
боевики
8.06
рейтинг книги
Вор (Журналист-2)

Замуж второй раз, или Ещё посмотрим, кто из нас попал!

Вудворт Франциска
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Замуж второй раз, или Ещё посмотрим, кто из нас попал!

Мама из другого мира...

Рыжая Ехидна
1. Королевский приют имени графа Тадеуса Оберона
Фантастика:
фэнтези
7.54
рейтинг книги
Мама из другого мира...