Студопедия

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

КАТЕГОРИИ:

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






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

 


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

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