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

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

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 истинно, то значения параметров функции просто игнорируются.

Выбор между значениями по умолчанию и перегруженными функциями

Перейти на страницу:

Похожие книги

Сущность технологии СОМ. Библиотека программиста
Сущность технологии СОМ. Библиотека программиста

В этой книге СОМ исследуется с точки зрения разработчика C++. Написанная ведущим специалистом по модели компонентных объектов СОМ, она раскрывает сущность СОМ, помогая разработчикам правильно понять не только методы модели программирования СОМ, но и ее основу. Понимание мотивов создания СОМ и ее аспектов, касающихся распределенных систем, чрезвычайно важно для тех разработчиков, которые желают пойти дальше простейших приложений СОМ и стать по-настоящему эффективными СОМ-программистами. Показывая, почему СОМ для распределенных систем (Distributed СОМ) работает именно так, а не иначе, Дон Бокс дает вам возможность применять эту модель творчески и эффективно для ежедневных задач программирования.

Дональд Бокс

Программирование, программы, базы данных / Программирование / Книги по IT