![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Использование значений, заданных по умолчаниюСодержание книги
Поиск на нашем сайте
Функции-члены класса, подобно обычным функциям, могут использовать значения, заданные по умолчанию. При объявлении функций-членов с аргументами, задаваемыми по умолчанию, используется уже знакомый вам синтаксис, как показано в листинге 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 истинно, то значения параметров функции просто игнорируются.
Выбор между значениями по умолчанию и перегруженными функциями
В листингах 10.1 и 10.2 выполняются одни и те же задачи, но использование перегруженных функций в листинге 10.1 делает программу более естественной и читабельной. Кроме того, если в программе потребуется третий вариант функции, например, для того, чтобы пользователь мог задать только один размер геометрической фигуры, а другой оставить по умолчанию, не составит труда добавить новую перегруженную функцию. Как решить, что следует использовать в программе — перегруженные функции или значения по умолчанию? Примите к сведению следующие положения. Использование перегруженных функций предпочтительнее, если: • не существует стандартных общепринятых значений, которые можно было бы использовать по умолчанию; • в программе в зависимости от ситуации необходимо использовать различные алгоритмы; • необходимо иметь возможность изменять тип значений, передаваемых в функцию.
|
|||||
Последнее изменение этой страницы: 2016-12-10; просмотров: 309; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.14.24.177 (0.008 с.) |