Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Либерти Джесс. Освой самостоятельно С++ за 21 день. - royallib.ru.rtf
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2.55 Mб
Скачать

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

Функции-члены класса, подобно обычным функциям, могут использовать значения, заданные по умолчанию. При объявлении функций-членов с аргументами, задаваемыми по умолчанию, используется уже знакомый вам синтаксис, как показано в листинге 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;  // используется значение текущего класса

40:       printHeight = itsHeight;

41:    }

42:    else

43:    {

44:       printWidth = width;   // используются значения параметра

45:       printHeight = height;

46:    }

47:

48:

49:    for (int i = 0; i<printHeight; i++)

50:    {

51:       for (int j = 0; j< printWidth; j++)

52:       {

53:          cout << "*";

54:       }

55:       cout << "\n";

56:    }

57: }

58:

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

60: int main()

61: {

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

63:    Rectangle theRect(30,5);

64:    cout << "DrawShape(0,0,true)...\n";

65:    theRect.DrawShape(0,0,true);

66:    cout << "DrawShape(40,2)...\n";

67:    theRect.DrawShape(40,2);

68:    return 0;

69: }

Результат:

DrawShape(0,0,true)...

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

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

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

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

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

DrawShape(40,2)...

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

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

Анализ: В листинге 10.2 перегруженная функция DrawShape() заменена простой функцией с параметрами, задаваемыми по умолчанию. Функция определена в строке 13 с тремя параметрами. Первые два, aWidth и aHeigth, относятся к типу USH0RT, а третий представляет собой логическую переменную UseCurrentVals, которой по умолчанию присваивается значение false.

Выполнение этой немного громоздкой функции начинается со строки 28. Сначала проверяется значение переменной UseCurrentVals. Если эта переменная содержит значение true, то для присвоения значений локальным переменным printWidth и printHeigth используются соответственно переменные-члены itsWidth и itsHeigth.

Если окажется, что переменная UseCurrentVals содержит значение false либо по умолчанию, либо оно является результатом установок, сделанных пользователем, то переменным printWidth и printHeigth присваиваются значения параметров функции, заданные по умолчанию.

Обратите внимание, что если UseCurrentVals истинно, то значения параметров функции просто игнорируются.