Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР13-С++17-мая-2012.doc
Скачиваний:
13
Добавлен:
15.09.2019
Размер:
1.3 Mб
Скачать

1.14. Встраиваемые функции (inline)

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

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

Пример 13.28

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

#include <iostream.h>

inline float cube (const float a){return a*a*a;}

int main()

{ cout<<”enter a...”;

float side; cin>>side;

cout<<”side=”<<side<<” cube(side)=”<<cube(side)<<endl;

return 0;

}

1.15. Перегрузка функций

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

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

Пример 13.29

Использование перегруженной функции square для расчета квадрата переменной типа int и переменной типа double.

#include <iostream>

using namespace std;

int square (int x);

double square (double x);

int main()

{

cout<<”sqr (int x = 8)= ”

<< square (8)<<endl;

cout<<” sqr (double x = 1.1)= ”

<< square(1.1)<<endl;

system("pause");

return 0;

}

int square (int x) { return x*x; }

double square (double x) { return x*x; }

Пример 13.30

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

#include <iostream.h>

#include <conio.h>

// Прототипы функций

int Sum(int, int);

int Sum(int, int, int);

int Sum(int[], int);

int main()

{

int mas[] = {3,2,4,9,5,8}; // Инициализация массива mas

cout << Sum(5, 3) << endl;

cout << Sum(5, 3, 11) << endl;

cout << Sum(mas, 6) << endl;

return 0;

}

int Sum(int a, int b) // Функция суммирования двух чисел

{

return a+b;

}

int Sum(int a, int b, int c) // Функция суммирования трех чисел

{

return a+b+c;

}

int Sum(int a[], int n) // Функция суммирования элементов массива

{

int s = 0;

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

s+= a[i];

return s;

}

1.16. Указатель на функцию

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

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

Например, имеется функция:

double y (double x, int n)

Объявляем указатель на функцию:

double (*fun) (double, int);

Присвоим указателю fun адрес функции y:

fun = y;

Функцию через указатель можно вызывать

x = fun (t, m);

или

x = (*fun) (t, m);