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