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

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

Жанры

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

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

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

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

Третий. Том 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий. Том 4

70 Рублей

Кожевников Павел
1. 70 Рублей
Фантастика:
фэнтези
боевая фантастика
попаданцы
постапокалипсис
6.00
рейтинг книги
70 Рублей

Призыватель нулевого ранга. Том 3

Дубов Дмитрий
3. Эпоха Гардара
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Призыватель нулевого ранга. Том 3

Кодекс Охотника. Книга ХХ

Винокуров Юрий
20. Кодекс Охотника
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга ХХ

Войны Наследников

Тарс Элиан
9. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Войны Наследников

Мастер 10

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

Рядовой. Назад в СССР. Книга 1

Гаусс Максим
1. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Рядовой. Назад в СССР. Книга 1

Леди Малиновой пустоши

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Леди Малиновой пустоши

(Не)зачёт, Дарья Сергеевна!

Рам Янка
8. Самбисты
Любовные романы:
современные любовные романы
5.00
рейтинг книги
(Не)зачёт, Дарья Сергеевна!

Возвышение Меркурия. Книга 3

Кронос Александр
3. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 3

Метатель. Книга 6

Тарасов Ник
6. Метатель
Фантастика:
боевая фантастика
попаданцы
постапокалипсис
рпг
фэнтези
фантастика: прочее
5.00
рейтинг книги
Метатель. Книга 6

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

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

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

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