Содержание
- 2. Содержание лекции Функции. Простые функции Передача аргументов в функции Значения, возвращаемые функцией Ссылки на аргументы Перегруженные
- 3. Что такое функция? Функция – это именованное объединение группы операторов, которое может быть вызвано из других
- 4. Что такое функция?
- 5. Простые функции void starline() { for (int i=0; i cout cout } int main(){ starline(); cout
- 6. Объявление функции Как и переменные, функции нельзя использовать до указания необходимых атрибутов. Есть два способа описать
- 7. Пример void starline(); int main(){ starline(); cout starline(); cout starline(); } void starline() { // ...
- 8. Пример ************************************************** Username: Test User ************************************************** Password: ****** **************************************************
- 9. Определение функции Определение функции состоит из заголовка и тела функции. Заголовок функции должен соответствовать её прототипу.
- 10. Определение без объявления Объявление функции (прототип) может отсутствовать, если определение функции происходит раньше, чем первый её
- 11. Передача аргументов Аргумент – единица данных, передаваемая программой в функцию. Аргументы позволяют функции оперировать различными значениями
- 12. Передача констант в функцию void repchar(char, int); int main(){ repchar('-', 30); cout repchar('+', 30); cout repchar('-',
- 13. Передача констант в функцию ------------------------------ Username: Test User ++++++++++++++++++++++++++++++ Password: ****** ------------------------------
- 14. Передача аргументов Два правила: Важно соблюдать порядок следования аргументов Типы аргументов в объявлении и определении должны
- 15. Передача значений переменных void repchar(char symbol, int n); int main(){ char symbol_in; int n_in; cout cin
- 16. Передача аргументов по значению void square(int x) { x = x*x; } int main(){ int x
- 17. Прототипы float calc_dist(int, int, int, int); // Not bad! float calc_dist(int x1, int y1, int x2,
- 18. Возвращаемое значение Для того, чтобы вернуть вызывающей программе значение используется оператор return float calc_dist(int x1, int
- 19. Возвращаемое значение int main(){ int x1=1, y1=1; int x2=0, y2=-1; float dist1 = calc_dist(0, 0, x1,
- 20. Возвращаемое значение float calc_dist(int x1, int y1, int x2, int y2) { float dist = sqrt(pow(x2
- 21. Возвращаемое значение Количество аргументов функции может быть произвольным, но возвращаемое значение – всегда только одно. Есть
- 22. Ссылки на аргументы Ссылка является псевдонимом, или альтернативным именем переменной. Наиболее важное применение ссылок – передача
- 23. Ссылки на аргументы void increment(int& number) { number = number + 1; } int main(){ int
- 24. Пример void swap(int&, int&); int main(){ int a = 101, b = 202; swap(a, b); //
- 25. Передача по указателю void swap(int* x, int* y) { int temp = *x; *x = *y;
- 26. Что получим? void swap(int* x, int* y) { int* temp; temp = x; x = y;
- 27. Передача указатель/по ссылке Передача указателя в функцию в качестве аргумента похожа на передачу по ссылке. Но
- 28. Передача массивов void degrees2radians(int length, float arr[]) { for (int i = 0; i arr[i] *=
- 29. Передача массивов void degrees2radians(int length, float arr[]) { cout // ... } int main(){ float degrees[]
- 30. Немного сложнее void print_matrix(int matrix[][], int m_size) { for (int i = 0; i for (int
- 31. Немного сложнее void print_matrix(int matrix[3][3], int m_size) { for (int i = 0; i for (int
- 32. Объявление функции с аргументами в виде массива Можно использовать следующие форматы объявления: void print_matrix(int matrix[3][3], int
- 33. Почему?
- 34. Передача массивов: указатели void degrees2radians(int length, float* arr) { for (int i = 0; i arr[i]
- 35. Передача массивов: указатели void degrees2radians(int length, float* arr) { for (int i = 0; i arr[i]
- 36. Немного сложнее void print_matrix(int* matrix[], int m_size) { for (int i = 0; i for (int
- 37. Немного сложнее void print_matrix(int** matrix, int m_size) { for (int i = 0; i for (int
- 38. Перегрузка функций Перегруженная функция выполняет различные действия, зависящие от типов данных, передаваемых ей в качестве аргументов.
- 39. Пример void starline() { for (int i=0; i cout cout } void repchar(char symbol, int n)
- 40. Перегрузка функций Очевидный недостаток: разработчику нужно запомнить все имена функций и различия между действиями, выполняемыми функциями.
- 41. Улучшенная версия примера void repchar() { for (int i=0; i cout cout } void repchar(char symbol)
- 42. Улучшенная версия примера int main() { repchar(); repchar('#’); repchar('$', 15); // ************************************************** // ################################################## // $$$$$$$$$$$$$$$
- 43. Как это работает? Довольно просто: с помощью сигнатуры функции, которая позволяет различать между собой функции по
- 44. Различные типы аргументов void print(int i) { cout } void print(double f) { cout } void
- 45. Пример int main() { print(10); print(101.11); print("Hello World"); // It is an int: 10 // It
- 46. Рекурсия Рекурсия – это средство программирование, позволяющее функции вызывать саму себя на выполнение. Самые популярные примеры:
- 47. Простейший пример unsigned long fact(unsigned long n) { if (n > 1) return n * fact(n
- 48. Простейший пример int fact(int n) { if (n > 1) return n * fact(n-1); else return
- 49. Рекурсия
- 50. Рекурсия Каждая рекурсия должна включать в себя условие окончания рекурсии. В противном случае рекурсия будет происходить
- 51. Еще один пример // 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,
- 52. Встраиваемые функции Использование функций является экономичным с точки зрения использования памяти, т.к. вместо дублирования используется механизм
- 53. Встраиваемые функции
- 54. Когда использовать? Обычно встраиваемые функции представляют собой небольшой фрагмент кода. В этом случае дополнительные инструкции, необходимые
- 55. Когда использовать? Неочевидное решение: использовать встраиваемые функции (inline functions). Отличие встраиваемых функций от обычных заключается в
- 56. Пример inline void starline() { for (int i=0; i cout cout } int main(){ starline(); cout
- 57. Встраиваемые функции Важно: ключевое слово inline является рекомендацией компилятору, которая может быть проигнорирована. В случае игнорирования,
- 58. Аргументы по умолчанию В C++ можно организовать функцию так, чтобы ее можно было вызвать вообще не
- 59. Улучшенная версия примера void repchar() { for (int i=0; i cout cout } void repchar(char symbol)
- 60. Улучшенная версия примера void repchar(char symbol='*', int n=50) { for (int i=0; i cout cout }
- 61. Улучшенная версия примера void repchar(char symbol='*', int n=50); int main() { repchar(); repchar('#’); repchar('$', 10); }
- 62. Аргументы по умолчанию Опускать при вызове можно только аргументы, стоящие в конце списка при объявлении функции.
- 63. Область видимости и класс памяти Два аспекта, касающихся взаимодействия переменных и функций: Область видимости Класс памяти.
- 64. Типы области видимости Три типа области видимости: Локальная область видимости Область видимости файла (Область видимости класса)
- 65. Классы памяти Существует два класса памяти: automatic (автоматический) и static (статический). У переменных первого класса время
- 66. Локальные переменные Переменные, определяемые внутри функции (включая функцию main), называются локальными, поскольку их область видимости ограничивается
- 67. Локальные переменные Создаются и уничтожаются при входе и выходе из функции соответственно. Компилятор не инициализирует локальные
- 68. Глобальные переменные Глобальные переменные определяются вне каких-либо функций (а также вне классов). Глобальные переменные видимы из
- 69. Глобальные переменные Глобальные переменные имеют статический класс памяти, что означение их существование в течение всего времени
- 70. Статические переменные Существует два вида статических переменных: Статические локальные переменные Статические глобальные переменные Статическая локальная переменная
- 71. Пример float get_avg(float new_number) { static float total = 0; static int count = 0; count++;
- 72. Область видимости/Класс памяти
- 73. Возвращение значения по ссылке В функции можно не только передавать аргументы с помощью ссылок, но также
- 74. Пример int x; int& setx(); int main() { setx() = 92; cout // x = 92
- 75. Возвращение значения по ссылке Вызов функции интерпретируется как значение, получаемое при его выполнении: у = squareroot(x);
- 76. Еще примеры int x; int& setx(); int main() { setx() = 92; cout return 0; }
- 77. Зачем всё это? В процедурном программирование существует очень мало задач, в которых может понадобиться возвращать значение
- 78. Константные аргументы функции void aFunc(int& a, const int& b); int main() { int alpha = 7,
- 79. Пример вопроса на экзамене Значение аргумента по умолчанию: Может использоваться вызывающей программой Может использоваться функцией Должно
- 80. Пример вопроса на экзамене Каков результат работы этой программы?
- 81. Пример задачи на экзамене Написать функцию, которая принимает количество секунд, переводит их формат и выводит на
- 83. Скачать презентацию