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

Вызов функции всегда сопровождается дополнительными действиями по обращению к функциям, передачей параметров через стек, передачей возвращаемого значения. Все это ухудшает характеристики программы, в частности ее быстродействие.Но C++ позволяет задавать функции, которые не вызываются, а встраиваются в программу непосредственно в месте ее вызова. В результате этого в программе создается столько копий встраиваемой функции, сколько раз к ней обращалась вызывающая программа.

Использование встраиваемых функций не связано с механизмами вызова и возврата, следовательно, работают они гораздо быстрее обычных. Однако они способны значительно увеличить объем программного кода.Для объявления встраиваемой функции указывают спецификатор inline перед определением функции.

Спецификатор inline является не командой для компилятора, а только запросом. Поэтому, если компилятор по каким-либо причинам не может встроить функцию, она компилируется как обычная и никаких сообщений об этом на экран не выдается.

Некоторые компиляторы не могут сделать функцию встраиваемой, если:функция содержит операторы цикла,функция содержит операторы switch или goto,функция рекурсивная.

Реально компилятор может проигнорировать объявление inline, если сочтет функцию слишком большой, вследствие чего характеристики программы могут оказаться хуже, чем в случае вызываемой функции

24. Понятие и назначение функции в С(C++). Понятие и назначение перегрузки функций вС++

В программах, написанных на языке C++, возможно существование нескольких различных функций, имеющих одно имя. При этом одноименные функции обязательно должны отличаться числом и/или типом своих аргументов. Такие функции называются перегруженными.

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

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

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

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

Функции не могут быть перегружены, если

-Они отличаются только типом возвращаемого значения. Попытки перегрузить функции таким образом приводят к появлению ошибки компиляции «Typemismatchinredeclaration». Это происходит потому, что компилятор принимает во внимание только аргументы функций.

-Их аргументы отличаются только использованием ссылок.

Их аргументы отличаются только применением модификаторов const

25. Понятие и назначение функции в С(C++). Как определяется указатель на функцию? Когда удобно использовать указатель на функцию

В определении указателя на функцию количество и тип параметров должны совпадать с соответствующими типами в определении функции, на которую ставится указатель.

Присвоение указателю адреса функции не требует операции взятие адреса (&), поскольку имя функции само по себе обозначает этот адрес.

Определение указателя на функцию:

тип (*имя_указателя)(типы параметров функции)

Вызов функции по указателю:

(*имя_указателя)(список аргументов)

#include<conio.h>

#include<iostream>

usingnamespacestd;

//суммированиедвухчисел

float sum(float a, int b)

{ return a + b;

}int main()

{ float (*ptr)(float, int); // описание указателя на функцию

ptr = sum; // присвоение указателю адреса функции

floatx = sum(0.5, 1); // вызов функции по имени

floaty = (*ptr)(1.5, 2); // вызов функции по указателю

cout<< x << ' ' << y; getch();}

26. Понятие файла и потока в С и С++. Назначение потоков. Буферизированный ввод вывод.

Поток позволяет ассоциировать файл с буфером, который позволяет осуществить эффективный ввод - вывод. Буфер – это выделенный участок памяти. При буферном вводе информация с носителя информации (из файла) вначале поступает в буфер, а затем оттуда передается прикладной программе. Аналогично и при буферном выводе – информация из программы вначале поступает в буфер, а затем – на носитель информации (в файл).

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

Синтаксис определения файлового потока для вывода данных в заданный файл :

ofstreamимя_потока(имя_файла,ios::out);

Синтаксис определения файлового потока для ввода данных из заданного файла :

ifstreamимя_потока(имя_файла,ios::in);

Синтаксис определения файлового потока для добавления данных в конец файла :

ofstreamимя_потока(имя_файла,ios::app);

Синтаксис чтения данных из файла:

Файловый_поток>>имена_переменных;

Синтаксис вывода данных в файл:

Файловый_поток<<выводимые_данные;

Понятие текстовых и бинарных файлов. Открытие файлов в стиле языка С: синтаксис,

семантика, примеры

Текстовые файлы состоят из строк символов и предназначены для чтения человеком. На диске текстовые файлы хранятся в виде сплошной последовательности символов, и их деление на строки становится заметным лишь в момент вывода на экран или на печать, так как именно при выводе управляющие символы (например, \n) начинают выполнять свои функции.

Бинарный файл – это последовательность байтов, однозначно соответствующая последовательности байтов, записанной на внешнем устройстве

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

В языке С файлы открываю с помощью функции fopen(). Функция fopen() имеет два параметра. Первый параметра является строковой константой, которая задает имя файла и путь к нему. Второй параметр – тоже строковая константа – задает режим доступа к файлу. Режим доступа описывает две составляющие: способ доступа (чтение или запись) и тип файла (текстовый или двоичный).

Для работы с текстовым файлом можно к режиму доступа добавить строчную латинскую букву t, но делать это не обязательно, так как файлы открываются в текстовом виде по умолчанию.

Для работы с бинарными файлами обязательно нужно к режиму доступа добавить строчную латинскую букву b.

Таким образом, чтобы открыть файл (например, текстовый файл) для чтения, нужно произвести следующие действия :

-Объявить указатель на поток;

-Открыть файл функцией fopen() (т.е. связать указатель на поток с дисковым файлом и указать режим доступа r).

При попытке открыть существующий файл можно допустить ошибку в его имени или в указании пути к нужному файлу. Это вызывает ошибку выполнения программы. Следует предвидеть подобные ситуации и проводить проверку возможности открытия файла. Такую проверку осуществить довольно легко, так как функция fopen() возвращает значение указателя на поток в случае его успешного открытия и значение NULL (нулевой указатель), если доступ к файлу невозможен

Наши рекомендации