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

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

Жанры

Освой самостоятельно С++ за 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; // используется значение текущего класса

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

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

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

Адепт

Листратов Валерий
4. Ушедший Род
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Адепт

Последний реанорец. Том III

Павлов Вел
2. Высшая Речь
Фантастика:
фэнтези
попаданцы
5.25
рейтинг книги
Последний реанорец. Том III

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

Сапфир Олег
27. Лекарь
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 27

Убивать чтобы жить 2

Бор Жорж
2. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 2

Отверженный VII: Долг

Опсокополос Алексис
7. Отверженный
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Отверженный VII: Долг

Мужчина моей судьбы

Ардова Алиса
2. Мужчина не моей мечты
Любовные романы:
любовно-фантастические романы
8.03
рейтинг книги
Мужчина моей судьбы

Граф

Ланцов Михаил Алексеевич
6. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Граф

Страж Тысячемирья

Земляной Андрей Борисович
5. Страж
Фантастика:
боевая фантастика
альтернативная история
фэнтези
5.00
рейтинг книги
Страж Тысячемирья

Неудержимый. Книга III

Боярский Андрей
3. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга III

Идеальный мир для Демонолога 10

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

Виконт. Книга 1. Второе рождение

Юллем Евгений
1. Псевдоним `Испанец`
Фантастика:
фэнтези
боевая фантастика
попаданцы
6.67
рейтинг книги
Виконт. Книга 1. Второе рождение

Отмороженный 4.0

Гарцевич Евгений Александрович
4. Отмороженный
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Отмороженный 4.0

Сын Тишайшего

Яманов Александр
1. Царь Федя
Фантастика:
попаданцы
альтернативная история
фэнтези
5.20
рейтинг книги
Сын Тишайшего