ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 5) онлайн
Аргументы по умолчанию
Можно организовать функцию, имеющую аргументы, таким образом, что ее можно будет вызывать, вообще не указывая при этом никаких аргументов. Одна- ко для этого при объявлении функции необходимо задать значения аргументов по умолчанию.
Чтобы продемонстрировать использование аргументов, задаваемых по умол- чанию, приведем пример, являющийся модификацией программы OVERLOAD. В программе OVERLOAD мы использовали три различные функции с одним име- нем, чтобы обрабатывать различные типы передаваемых значений. Следующая программа, MISARG, достигает того же эффекта, но другим путем:
// missarg.cpp
// применение аргументов по умолчанию #include <iostream> using namespace std;
void repchar(char='*', int=45); // прототип с аргументами
// по умолчанию
int main() {
repchar(); // печатает символ '*' 45 раз
repchar('='); // печатает символ '=' 45 раз
repchar('+', 30); // печатает символ '+' 30 раз
return 0;
}
//--------------------------------------------------------
// функция repchar() // печатает строку символов
void repchar(char ch, int n) // при необходимости будут { // использоваться значения по умолчанию
for(int j=0; j<n; j++) // цикл n раз
cout << ch; // вывод ch
cout << endl;
}
В этой программе функция repchar() имеет два аргумента. Ее вызов произ- водится из функции main() три раза: первый раз — без аргументов, второй раз — с одним аргументом, третий раз — с двумя аргументами. Первые два вызова рабо- тают потому, что вызываемая функция имеет значения аргументов по умолча- нию, которые используются в том случае, если при вызове значение аргумента не передается. Значения аргументов по умолчанию определяются в прототипе функции repchar();
void repchar(char='*', int=45); // прототип
Значение, присваиваемое аргументу по умолчанию, находится справа от зна- ка равенства, располагающегося после типа аргумента. Подобным образом мож- но определять значения по умолчанию и в том случае, если в прототипе фигу- рируют имена переменных:
void repchar(char reptChar='*', int numberReps=45);
Если при вызове функции число переданных аргументов на единицу мень- ше, чем описано в прототипе, то компилятор считает, что отсутствует последний аргумент. Таким образом, в случае вызова функции repchar() с одним аргумен- том значение этого аргумента присваивается параметру ch, а параметру n при- сваивается значение по умолчанию, равное 45.
Если при вызове repchar() отсутствуют оба аргумента, то обоим ее парамет- рам, ch и n, будут присвоены значения по умолчанию, соответственно равные '*'
и 45. Таким образом, все три вызова функции repchar() будут корректными, не- смотря на то, что количество аргументов в них различно.
Обратите внимание, что опускать при вызове можно только аргументы, сто- ящие в конце списка при объявлении функции. Например, можно не указать три последних аргумента, но нельзя одновременно пропустить предпоследний аргумент и указать последний. Это вполне логично, поскольку компилятор не может узнать, какой из аргументов, стоящих в середине списка, вы пропустили (можно было бы распознавать отсутствие аргумента с помощью запятых, между которых не указывалось бы отсутствующего значения, но запятые слишком часто приводят к опечаткам, что послужило причиной отказа от этой идеи разработ- чиков C++). Разумеется, на попытку пропустить те аргументы, для которых не определены значения по умолчанию, компилятор отреагирует выдачей сообще- ния об ошибке.
Задание значений аргументов по умолчанию полезно в тех случаях, когда аргументы функции часто принимают какое-то одно значение. Кроме того, значения по умолчанию могут использоваться, если программист хочет моди- фицировать уже написанную функцию путем добавления в нее нового аргумен- та. В этом случае не нужно будет изменять вызовы функции, поскольку значе- ние нового аргумента будет задано по умолчанию.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
Схожі підручники
- Соціологія Навчально-методичний посібник для студентів всіх напрямків (частина 2)
- Історія педагогіки (частина 3)
- Методичні вказівки до виконання розрахункової роботи з дисципліни «Системи промислових технологій в галузях економіки»
- Загальні питання з курсу Політекономія (частина 2)
- ІНДИВІДУАЛЬНА РОБОТА №2 з Регіональної економіки
- Українська мова за професійним спрямуванням. Навчальний посібник (частина 1)
