Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Аргументы функций по умолчаниюСодержание книги
Поиск на нашем сайте
Важное свойство С++ — возможность передачи аргумента в функцию по умолчанию. Оно используется, если при вызове функции необходима только часть параметров, а не все. Пример: функция, которая возвращает сумму четырех целых значений, подобная следующей: int sum(int a, int b, int с, int d) {return a + b + с + d;} Для вызова функции только с двумя аргументами (назовем их vl и v2) следует дополнить нулями два недостающих параметра: cout <<sum(v1, v2, 0, 0); Это ограничение невелико, но оно заставляет вас разбираться в документации по функции sum() для того, чтобы определить, какими значениями дополнить неиспользуемые параметры. Ошибочное употребление -1 или другого значения вместо параметров с и d, что вполне может допустить невнимательный программист, заставит функцию вернуть неправильную сумму. Аргументы функций по умолчанию дополняют необходимые значения для незаданных аргументов. Для объявления значения аргумента по умолчанию в прототипе функции завершите параметр функции знаком равенства и необходимым значением: int sum(int a, int b, int с = 0, int d = 0); Подобное объявление sum() позволяет вызывать ее не только с двумя, но и с большим числом аргументов -до четырех. Значения по умолчанию должны идти последними в списке параметров функции и могут появляться только в прототипе функции. Если не указаны аргументы для с и d, то они замещаются значениями по умолчанию, указанными в прототипе функции. Теперь допустимы следующие операторы: cout << sum(1, 2); // а == 1, b == 2, с == 0, d == 0 cout << sum(1, 2, 3); // а == 1, b == 2, с == 3, d == 0 cout << sum(1, 2, 3, 4); // а == 1, b == 2, с == 3, d == 4
Листинг 1.14 показывает более реальньй пример функции с аргументами по умолчанию. Программа центрирует введенную строку путем ее копирования в строковый буфер вывода, обрамленной одним или двумя символами заполнения. Можно использовать функцию Center() программы-примера для подготовки строк вида: - ***♦ Error: You goofed big time! **** <«««Press any key to continue»>>>>> Скомпилируйте CENTER.CPP из листинга 12.14 как EasyWin- или DOS-приложение. Запустите программу и введите строку, выводящуюся несколькими способами функцией Center(), которая заодно демонстрирует использование аргументов по умолчанию. Листинг 1.14. CENTER.CPP (использование аргументов функции по умолчанию) 1: #include <iostream.h> 2: #include <string.h> 3: 4: #define SIZE 128 5: 6: void Center(const char *instr, char *outstr, 7: int width = 0, char lFill = "-', char rFill = '-'); 8: 9: main() 10: { 11: char instr[SIZE]; // Вводимая строка 12: char outstr[SIZE]; // Выводимая строка 13: int length; // Длина строки в символах 15: cout «"Enter a string:"; 16: cin.getline(instr, SIZE / 2); 17: length = strlen(instr); 19: Center(instr, outstr); 20: cout «outstr «'\n"; 21: Center(instr, outstr, length + 8); 22: cout «outstr «"\ri'; 23: Center(instr, outstr, length + 16, '*', '*'); 24: cout «outstr «'\rf; 25: Center(instr, outstr, 78, '<", >); 26: cout «outstr «"\n"; 28: return 0; 29: } 31: // instr: Указатель на входную строку 32: //outstr: Указатель на выходную строку 33: // width: Окончательная желаемая длина выходной строки 34: // fill: Символ для заполнения выходной строки 36: void Center(const char *instr, char *outstr, 37: int width, char lFill, char rFill) 38: { 39: if (outstr == 0) // Выходная строка не должна быть нулевой 40: return; // Если нулевая - немедленное возвращение 42: if (instr == 0) { // Если входная строка нулевая, 43: *outstr = 0; // Выводим пустую строку 44: return; // и возвращаемся. 45: } 47: // Вычисление переменных для заполнения выходной строки 48: int len = strlen(instr); 49: if (width < len) 50: width = len; 51: int wd2 = (width - len) / 2; 52: 53: int i; // Индекс строки и управляющая переменная для цикла for 54: 55: for (i = 0; i < wd2; i++) 56: outstr[i] = lFill; 57: for (/*i = i*/; i < wd2 + len; i++) 58: outstr[i] = instr[i - wd2]; 59: for (/*i = i*/; i < width; i++) 60: outstr[i] = rFill; 61: outstr[i] = 0; // Завершаем строку нулем 62: } В программе объявляется прототип функции Center() с тремя аргументами по умолчанию: void Center(const char *instr, char *outstr, int width = 0, char lFill = '-', char rFill = '-'); Первые два параметра — адреса входной и выходной строки. Входная строка объявлена с ключевым словом const для предохранения ее от изменения в теле функции. Последние три параметра определены со значениями по умолчанию, которые будут их инициализировать при пропуске соответствующих аргументов в операторе, в котором вызывается функция Center(). Как показано в программе, первый вызов функции должен быть только с двумя аргументами: Center(instr, outstr); Другие аргументы будут значениями по умолчанию, определенными в прототипе функции. В других вызовах Center в примере указывается один или более аргументов, переопределяющих значения по умолчанию. Каждое выражение порождает различные выходные строки с отцентрированной и обрамленной различными символами заполнения выходной строкой. Ссылки int i = 1234; int *p = &i; объявляется целая переменная i, инициализированная значением 1234, и указатель на целое p, адресующий i. В соответствии с этими объявлениями следующие два оператора выводят значение i: cout << "i == " << i << '\n'; cout <<"i == " << *p <<'\n'; Выражение *p указывает компилятору, что следует использовать значение, адресуемое р. Использование указателей в качестве альтернативного способа доступа к переменным таит в себе опасность — если оператор изменил адрес, хранящийся в указателе, то этот указатель более не ссылается на то же значение. С++ предлагает альтернативу для более безопасного доступа к переменным через указатели. Объявив ссылочную переменную, вы создадите объект, который, как указатель, ссылается на другое значение, но, в отличие от указателя, постоянно привязан к своему alter ego ("второму я"). Ссылка на значение всегда ссылается на это значение. Ссылки, в основном, используются в качестве переменных, параметров функций и результатов функций.
|
||||
Последнее изменение этой страницы: 2016-08-01; просмотров: 174; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.129.211.116 (0.005 с.) |