Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы — презентация
logo
Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
  • Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы
1/24

Первый слайд презентации

Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы ускорить программу ценой занимаемого места. После того, как с помощью ключевого слова inline определена встроенная функция, то всякий раз, когда будет вызываться эта функция, компилятор будет заменять вызов функции фактическим кодом из функции. Такая функция выполняется быстрее, поскольку от процессора не требуется осуществлять переход к телу функции. Если стоит вызов функции, то процессор будет переходить к ней, будет пересылать данные через стек для оперирования этими данными внутри функции, а если идет сразу код функции, то не будет перехода и пересылки. Функции-члены (методы), определенные непосредственно внутри класса, по умолчанию считаются встроенными ( подставляемыми, inline ) потому что большинство методов, определенных внутри класса, довольно малы, а такие маленькие функции являются главными кандидатами на подстановку. Однако при этом программы, использующие встроенные функции, занимают больше места, поскольку копии таких встраиваемых функций определяются один раз, а подставляются вместо каждого вызова.

Изображение слайда

Слайд 2

Пример встроенной функции: #include <iostream> using namespace std; inline void World() { cout << “Hello, World” << endl; } int main () { World(); // вызов встроенной функции } При этом компилятор может проигнорировать ключевое слово inline, если функция слишком объемная (с циклами, операторами выбора или условными операторами). Также компилятор может сделать функцию встроенной без использования inline, если посчитает, что функция достаточно мала для этого.

Изображение слайда

Слайд 3

Директива #define Константы, определенные в программе, обрабатываются на этапе компиляции. Если константу определить в разделе #define, то препроцессор на самом первом этапе обработки программы (до компиляции) пройдет по всему коду и заменит определенную в #define константу на ее значение. Следующий код для компилятора после препроцессорной обработки будет выглядеть так:

Изображение слайда

Слайд 4

Макрос С помощью директивы #define функцию можно организовать в виде макроса ( пробел между S и ( … ) не допускается ):

Изображение слайда

Слайд 5

Условная компиляция с помощью #define Директивы условной компиляции препроцессора позволяют компилировать или пропускать фрагмент программы в зависимости от выполнения некоторого условия. Пример. В какой-то момент написания программы требуется вывод отладочной информации, которую для конечного пользователя мы выводить не собираемся, но она может нам понадобиться потом – для дальнейшей разработки этой же программы, т.е. удалять из кода ее тоже не планируем. И чтобы каждый раз не комментировать / раскомментировать по отдельности все строки отладочной информации, можно создать директиву #define и использовать конструкцию #ifdef … #endif Тогда на этапе препроцессорной обработки в этой программе будет найдено #define DEBUG, и компилятор обработает все строки кода, которые содержатся между # ifdef и #endif. Чаще разработчиками определяется неключевое слово DEBUG. Если отладочную информацию выводить будет не нужно, то можно просто закомментировать строку #define DEBUG, чтобы все строки между # ifdef и # endif игнорировались компилятором:

Изображение слайда

Слайд 6

С помощью директивы #else можно создать ветку, которая определяет случай закомментированного дебага, т.е. когда DEBUG не определён:

Изображение слайда

Слайд 7

Директива # ifndef работает так же как # ifdef с точностью до наоборот. ifndef – if no define ( если нет определения). Если же теперь DEBUG закомментировать, то сработает не #else, а основная ветвь :

Изображение слайда

Слайд 8

IDE затеняет невключенные фрагменты.

Изображение слайда

Слайд 9

elif аналогичен обычному else if :

Изображение слайда

Слайд 10

Стандартная функция time() для работы со временем time_t – переменная этого типа хранит кол-во секунд, прошедших с 1 января 1970 года. time() – получает адрес переменной vremya и заполняет его кол-вом секунд (чаще всего значением типа long int ). ctime() – получает адрес переменной vremya и преобразует содержимое переменной vremya в читабельную текущую дату / время.

Изображение слайда

Слайд 11

Определение длительности промежутка времени с помощью функции difftime()

Изображение слайда

Слайд 12

Две функции в одной программе не могут иметь одинаковых имен, т.к. компилятор C++ не сможет их различить. Однако используемое компилятором внутреннее имя функции – сигнатура функции – включает также количество аргументов, типы аргументов и их последовательность. Тип возвращаемого значения в сигнатуру функции не входит. Перегрузка функции ( function overloading) – это возможность называть несколько разных функций одним и тем же именем при условии, что эти функции отличаются своими параметрами. Эти функции output () являются разными, потому что отличаются аргументами, и поэтому эти функции output () могут находиться в одной области видимости (в одной программе). Перегрузка функций

Изображение слайда

Слайд 13

Тип аргумента void указывать не обязательно. Поэтому void sum ( void ) и void sum () являются одной и той же функцией и не могут находиться в одной программе. Следующие две функции тоже имеют одинаковые имена (сигнатуры) – sum(int) – и поэтому тоже не могут использоваться в одной программе:

Изображение слайда

Слайд 14

Шаблоны функций Например, нужна программа, которая будет вычислять сумму: целых чисел, вещественных и т.д. Пришлось бы для каждого типа данных писать отдельную функцию (делать перегрузку функции). Вместо этого можно создать шаблон функции, которая будет принимать параметры любого типа, в теле функции выполнять над ними указанные действия и возвращать полученное значение. Для создания шаблона функции используются ключевые слова template ( англ.) – шаблон и typename (ключевое слово из языка C ) – название типа ( обычно используют в качестве названия – T ). Тип данных параметров в этой программе, передаваемых в шаблонную функцию, должен быть одинаковым, потому что тип T не может быть одновременно разными типами.

Изображение слайда

Слайд 15

Количество параметров в шаблоне и в шаблонной функции должны совпадать. Если в шаблонную функцию требуется передавать параметры с разными типами данных, то нужно описать нужное количество шаблонных типов следующим образом ( для возвращаемого значения придется выбрать один из типов ):

Изображение слайда

Слайд 16

Еще один вариант: функция может ничего не возвращать Вместо typename (язык C ) можно использовать ключевое слово class из языка C++. Разницы в них нет, результат будет таким же, но в объявлении параметров принято использовать для всех параметров либо class, либо typename :

Изображение слайда

Слайд 17

Локальные, глобальные и статические переменные Локальные, глобальные и статические переменные отличаются друг от друга по двум критериям: 1. Возможность доступа к переменной; 2. Сохраняемость значения переменной. Доступ к переменной у всех функций Сохраняемость значения Локальная Нет Нет Статическая Нет Да Глобальная Да Да

Изображение слайда

Слайд 18

Переменные, объявленные внутри любой функции, в том числе внутри функции main(), называются локальными. В этом примере переменная r является локальной, т.е. функция fn () вообще не знает про существование переменной r. До вызова функции fn () переменной w не существует. После окончания работы fn () ее содержимое навсегда теряется – т.е. значение переменной w не сохраняется после того как функция fn () завершает свою работу. Доступ к w имеет только функция fn (), остальные функции не могут использовать переменную w.

Изображение слайда

Слайд 19

А глобальная переменная q существует на протяжении работы всей программы и в любой момент доступна всем функциям. Переменная q сохраняет свое значение на протяжении работы программы.

Изображение слайда

Слайд 20

Статическая переменная является чем-то средним между локальной и глобальной. Она создается, когда программа при выполнении достигает описания переменной (когда происходит первый вызов функции). Шестая строка выполняется только один раз при первом вызове функции, при всех дальнейших вызовах функция fn () начинает работу с седьмой строки. Статическая переменная тоже доступна только из функции, в которой она объявлена. Но, в отличие от локальной переменной, статическая переменная продолжает существовать и после окончания работы функции. Если в функции fn () статической переменной присваивается какое-то значение, то оно сохранится до следующего вызова fn ().

Изображение слайда

Слайд 21

Например, можно организовать повторный ввод пароля с помощью рекурсии. Рекурсия – это функция, вызывающая сама себя.

Изображение слайда

Слайд 22

Еще один вариант алгоритма той же программы с использованием рекурсии.

Изображение слайда

Слайд 23

Любую рекурсию можно заменить циклом. Любой цикл можно заменить рекурсией. Циклический алгоритм работает быстрее. Рекурсивный алгоритм может выглядеть более компактным.

Изображение слайда

Последний слайд презентации: Встроенные функции ( inline) Основная идея встраиваемых функций в том, чтобы

Златопольский Д.М. Сборник задач по программированию. № 10.41.

Изображение слайда

Похожие презентации

Ничего не найдено