Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка№7.docx
Скачиваний:
1
Добавлен:
25.11.2018
Размер:
35.37 Кб
Скачать

Вопросы для повторения

  1. Назовите три условия, необходимых для использования функции

1) • Предусмотреть определение функции.

• Предусмотреть прототип функции.

• Вызвать функцию.

  1. Функции без возвращаемых значений.

2) Функции без возвращаемых

значений называются функциями типа void, они имеют следующую

общую форму:

void имя_Функции (списокАргументов)

{

оператор ()

return; // необязательная конструкция

}

3. Какой тип данных не может быть использован в качестве

возвращаемого значения функции?

3) массив не может быть возвращаемым значением.

4. Функция с возвращаемым значением.

4) имяТипа имяФункции (списокАргументов)

{

операторы

return значение; // тип возвращаемого значения

//определяется типом функции

}

5. Оператор возврата return.

5) необязательная конструкция стоящая в самом концы возвращаемой функции.

6. Прототипирование и вызов функций.

6) Прототип уведомляет компьютер о том, какой тип должно иметь

возвращаемое значение функции, если таковое имеется, и сообщает

компилятору, сколько функция имеет аргументов и какого типа.

7. Почему компилятору нельзя обойтись без прототипа в случае

размещения программы в нескольких файлах.

7) Компилятор должен приостановить компиляцию

функции main() на время просмотра остальной части файла. Еще более

серьезные проблемы возникают в том случае, когда функции в этом

файле нет. Язык C++ позволяет вам разместить программу в нескольких

файлах, которые можно компилировать независимо друг от друга,

чтобы объединить их в единый модуль позднее. В таком случае

компилятор может потерять доступ к программному коду функции во

время компиляции функции main(). To же самое может случиться, если

функция является частью некоторой библиотеки.

8. Когда можно избежать использования прототипа и какие это

накладывает ограничения.

8) Единственный способ,

позволяющий избежать использования прототипа, состоит в том, чтобы

поместить определение функции в таком месте программы, где оно

будет предшествовать первому вызову функции. Однако это не всегда

возможно. Кроме того, стиль программирования, принятый в C++,

требует, чтобы функция main() всегда была первой, ибо она в общем

случае определяет структуру всей программы.

9. Является ли прототип функции оператором?

9) Прототип функции является оператором, поэтому за ним должна

следовать точка с запятой.

10. Будет ли ошибкой использование в списке аргументов прототипа

перечня типов без указания имен переменных, или же имена

переменных в списке аргументов прототипа должны быть указаны

обязательно?

10) Однако прототип функции не требует, чтобы вы снабдили

переменные именами, списка типов вполне достаточно. Программа

создает прототип функции cheers(), используя для этой цели только

тип аргумента:

void cheers(int); // в прототипе имена переменных

игнорируются

В общем случае, вы можете как включать имена переменных в

список аргументов для прототипа, так и исключать их из этого списка.

11. Будет ли ошибкой использование имен переменных в прототипе

функции отличных от имен переменных содержащихся в

определении функции.

11) Имена переменных в прототипе проявляют себя как заполнители, они вовсе не должны совпадать с именами, содержащимися в определении функции.

12. Чем прототипы помогают компилятору.

12)Правильно обращаться с возвращаемым значением функции.

Следить за тем, чтобы использовалось правильное число

аргументов функции.

Контролировать, чтобы применялись корректные типы

аргументов функции. Если при этом возникают ошибки,

компилятор по возможности приводит аргументы к

правильному типу.

13. Что означает – передать аргументы функции по значению?

13) Передача аргумента представляет собой

присвоение фактического аргумента формальному аргументу.

14. Что называют формальным аргументом или параметром, а что

фактическим аргументом или параметром? В чем разница?

14) Переменная, которая используется для приема передаваемого значения, называется формальным аргументом или параметром. Величина,

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

параметром.

15. Как ведут себя переменные объявленные внутри какой-либо

функции по отношению к ней самой и программы в целом? Что

означает понятие – локальная переменная?

15) Во время вызова функции компьютер выделяет память,

необходимую для этих переменных. Когда выполнение функции

прекращается, компьютер высвобождает память, которая была

отведена этим переменным. Такие переменные называются

локальными

16. Почему мы не используем спецификатор const для аргументов

функции, которые имеют базовые типы данных?

16) Потому что аргументов может быть очень много и некоторые из них могут иметь одно и то же значение.

при разных названиях

17. Как правильно указать несколько аргументов функции в ее

прототипе, в ее определении, при ее вызове?

17) В результате вызова функции n_chars() ей передаются два

аргумента.

Аналогично при определении функции вы используете в заголовке

функции список объявлений, отделенных друг от друга запятыми:

void n_chars (char с, int n) // два аргумента

18. Что общего между именем массива и указателем. Как объявить

массив в качестве параметра? Как обратиться к i-тому элементу

массива используя указатель.

18) arr[i] == *(ar + i) // два обозначения

// одной и той же величины

&arr[i] == ar +i // два обозначения

// одного и того же адреса

Помните, что добавление 1 к указателю, содержащему имя

массива, фактически означает добавление величины, равной размеру в

байтах типа значения, на которое ссылается указатель.

19. Может ли функция изменить массив, расположенный за ее

пределами, если имя массива передано ей в качестве аргумента,

или же такой массив будет вести себя как локальная переменная?

19) Передайте

функции обычную переменную, и она будет работать с ее копией, но

если функции передать массив, то она будет работать с его оригиналом.

20. В чем выгода от использования адресов массивов в качестве

аргументов функции?

Расходуется меньше памяти и времени.

21. Каким образом функция, использующая в качестве аргумента

адрес массива, узнает из какого числа элементов состоит массив.

Чтобы указать вид массива и число содержащихся в нем элементов функции, которая выполняет обработку массива, передавайте ей эти сведения в виде двух отдельных аргументов:

// прототип

void fillArray(int arr[], int size);

22. Что необходимо сделать, чтобы предотвратить случайное

изменение аргумента функции типа массив?

Чтобы предотвратить случайное изменение

аргумента типа массив, можно воспользоваться ключевым словом const

при объявлении формального аргумента:

void show_array(const double ar[ ], int n);

23. Как задать указатель, который ссылается на постоянный

объект(константу), и который не дает возможности использовать

его(указатель) для изменения величины.

можно использовать

такие значения, как аr[0], но нельзя изменять эти значения. Это

свидетельствует не о том, что исходный массив должен оставаться

постоянным, а о том, что вы не можете использовать аr в функции

show_array() для изменения данных. Таким образом, функция

show_array() рассматривает массив как данные, предназначенные

только для чтения.

Программный код функции show_array() имеет следующий вид:

void show_array(const double ar[ ], int n)

{

for (int i = 0; i < n; i++)

{

cout << "Property #" << (i + 1) << ": $";

cout << ar[i] << "\n";

}

}