ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 5) онлайн

Передача констант в функцию

В качестве примера рассмотрим следующую ситуацию. Пусть нам необходимо сделать функцию starline() более гибкой: мы хотим изменить ее таким обра- зом, чтобы она выводила не фиксированное (равное 45 в предыдущих примерах), а любое заданное количество символов. В следующем примере, TABLEARG, мы создаем модификацию функции starline() под названием repchar(). В качестве аргументов для функции используется символ, предназначенный для печати, а также число раз, которое данный символ будет выведен на экран.

// tablearg.cpp

// демонстрирует передачу аргументов в функцию #include  <iostream> using namespace std;

void repchar(char, int); // прототип функции

int main() {

repchar('-', 43);    // вызов функции

cout << "Тип данных Диапазон" << endl; repchar('=', 23);               // вызов функции

cout << "char    -128...127" << endl

<< "short            -32.768...32.767" << endl

<< "int  Системно-зависимый " << endl

<< "double -2.147.483.648...2.147.483.647" << endl; repchar('-', 43);    // вызов функции

return 0;

}

//--------------------------------------------------------

// определение функции repchar()

void repchar(char ch, int n) // заголовок функции {

for( int j=0; j<n; j++ )  // тело функции cout << ch; cout << endl;

}

Итак, новая функция называется repchar(). Ее прототип выглядит следующим образом:

void repchar(char, int); //объявление с указанием типов аргументов

В скобках указаны типы данных, которые будут иметь передаваемые в функ- цию аргументы: char и int.

При вызове функции вместо аргументов в скобках указываются их конкрет- ные значения (в данном случае константы):

repchar('-', 43);                // в вызове функции используются значения аргументов

Результатом данного вызова будет печать 43 символов '-'. При указании зна- чений аргументов важно соблюдать порядок их следования: сначала должно быть указано значение типа char, соответствующее символу, выводимому на экран, а затем значение типа int, которое определяет число раз, которое указан- ный символ будет напечатан. Кроме того, типы аргументов в объявлении и оп- ределении функции также должны быть согласованы.

Вызов функции repchar() repchar('=', 23);

приведет к появлению на экране 23 знаков равенства. Третий вызов снова выве- дет на печать 43 знака '-'. Результат работы программы TABLEARG будет выгля- деть следующим образом:

--------------------------------------------------------

Тип данных  Диапазон

===========================

 

Char  -128 to 127

Short -32.768 to 32.767

int   -Системно-зависимый

Long  -2.147.483.648 to 2,147.483,647

--------------------------------------------------------

Программа передает в функцию аргументы, например '-' и 43. Переменные, используемые внутри функции для хранения значений аргументов, называются параметрами. В функции repchar() в качестве параметров выступают перемен- ные ch и n (необходимо отметить, что многие программисты используют терми- ны аргумент и параметр как эквивалентные). При определении функции в ее заголовке мы указываем типы и имена параметров:

void repchar(char ch, int n) ; // в прототипе указаны типы и имена параметров

Параметры используются внутри функции так же, как обычные переменные. Присутствие имен n и ch в прототипе функции repchar() эквивалентно паре опе- раторов:

char ch; int n;

Когда вызов функции произведен, параметры автоматически инициализиру- ются значениями, переданными программой.

Передача значений переменных в функцию

В примере TABLEARG роль аргументов выполняли константы: '-', 43 и т. д. Теперь давайте рассмотрим пример, в котором вместо констант в функцию будут пере- даваться значения переменных. Следующая программа, VARARG, включает в себя ту же функцию repchar(), что и программа TABLEARG, но теперь символ и число его повторений будут задаваться пользователем:

// vararg.cpp

// передача переменных в функцию в качестве аргументов

#include  <iostream> using namespace std;

void repchar(char, int); // объявление функции

int main() {

char chin; int nin;

cout << "Введите символ: "; cin >> chin;

cout << "Введите число повторений символа: "; cin >> nin; repchar(chin, nin); return 0;

 }

// --------------------------------------------------------

// определение функции repchar()

void repchar(char ch, int n) // заголовок функции {

for(int j=0; j<n; j++)       // тело функции

cout << ch; cout << endl;

}

Пример взаимодействия программы VARARG с пользователем может выгля- деть так:

Введите символ: +

Введите число повторений символа: 20

++++++++++++++++++++

 

В этой программе переменные chin и nin функции main() передаются в каче- стве аргументов в функцию repchar();

repchar(chin, nin);          // вызов функции

Типы переменных, используемых в качестве аргументов функции, должны, как и в случае констант, совпадать с типами, указанными в объявлении и опре- делении функции. В данном случае это требование сводится к тому, чтобы пере- менная chin имела тип char, а переменная nin имела тип int.

 

10