Функции в C++.

Функции в C++ представляют собой подпрограммы. Большой код удобно разбивать на подпрограммы. Такое разбиение позволяет быстрее искать ошибки, повышает читаемость кода и даёт много преимуществ.

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

В C++ самой первой всегда выполняется функция main(), а остальные функции выполняются после. В функцию можно передавать данные для обработки. Можно закидывать названия переменных, объектов, константные значения. Внутри функции эти данные можно обрабатывать. Кидать в функцию данные можно из любых других функций: из функции main(), из любых своих в свои.

Пример построения функции:

#include "stdafx.h" 
#include <iostream>     
using namespace std;

void function_name () //создаем функцию
{
    cout << "Hello, world" << endl;
}

int main()
{
    function_name(); // Вызов функции
    return 0;
}

Перед вами простая программа, Hello, world, только реализованная с использованием функции. Если мы хотим вывести «Hello, world» где-то еще, нужно вызвать соответствующую функцию. В данном случае это делается так: function_name(); Оператор return используется для возвращения вычисляемого функцией значения.

Значения по умолчанию

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

тип имя=ЗначениеПоУмолчанию

Пример:

int pow(int n, int k=2)  // по умолчанию k=2
{
  if( k== 2) return( n*n );
  else return( pow( n, k-1 )*n );
}

Вызывать эту функцию можно двумя способами:

t = pow(i);  // t = i*i;
q = pow(i, 5); // q = i*i*i*i*i;

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

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

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

int sum(int a, int b=1)  { return(a+b); }
int sum(int a)           { return(a+a); }
то вызов
int r = sum(2);  // ошибка
выдаст ошибку из-за неоднозначности толкования sum().

Встраиваемые функции

В базовом языке Си директива препроцессора #define позволяет использовать макроопределения для записи вызова небольших часто используемых конструкций. Некорректная запись макроопределения может приводить к ошибкам, которые очень трудно найти. Макроопределения не позволяют определять локальные переменные и не выполняют проверки и преобразования аргументов. Если вместо макроопределения использовать функцию, то это удлиняет объектный код и увеличивает время выполнения программы.

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

inline double SUMMA(double a, double b)
{
 return(a + b);
}
При вызове этой функции
rez = SUMMA(x,y)*10;
будет получен следующий результат:
rez=(x+y)*10

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

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

Шаблоны функций

Шаблоны — средство языка C++, предназначенное для кодирования обобщённых алгоритмов, без привязки к некоторым параметрам (например, к типам данных).

Пример:

template <typename T>
void exchange ( T &a, T &b )  {
  T t;
  t = a;
  a = b;
  b = t;
}

// вызвать функцию можно так:
int a=5, b=8;
exchange (a,b);
cout << a;

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

double p=3.14, e=2.71;
exchange <double> (p,e);

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

 
Поделиться в facebook
Facebook
Поделиться в twitter
Twitter
Поделиться в vk
VK
Поделиться в google
Google+
Поделиться в email
Email

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Группа в VK

Помощь проекту

Обнаружили опечатку?

Сообщите нам об этом, выделите текст с ошибкой и нажмите Ctrl+Enter, будем очень признательны!

Свежие статьи

Похожие статьи

Локальные и глобальные переменные в С++.

Локальные и глобальные переменные в С++.

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

 
Математические функции в С++

Математические функции в С++

В языке С++ математические функции определены в заголовочном файле <cmath> функции выполняющие некоторые часто используемые математические задачи. Например, нахождение корня, возведение в степень, sin(), cos()

 
Работа с файлами в С++.

Работа с файлами в С++.

Файл – именованный набор байтов, который может быть сохранен на некотором накопителе. Файл имеет уникальное имя, например файл.txt. Для работы с файлами в С++ необходимо

 
Структуры в C++.

Структуры в C++.

Структура – это совокупность переменных, объединенных одним именем, предоставляющая общепринятый способ совместного хранения информации. Объявление структуры приводит к образованию шаблона, используемого для создания объектов структуры.

 

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: