Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Листинг 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(), в параметрах которой будет одно значение размера и переменная перечисления, позволяющая пользователю указать, что обозначает данный размер — ширину или длину прямоугольника.

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал