Программирование C++/Функции

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

Сразу хочу отметить, что в данном языке нет процедур.

Давайте напишем простую функцию.

int Add(int a, int b) //Перед именем функции указывается тип возвращаемого значения. 
// Запись более компактная, ведь не нужно писать ключевое слово function или procedure, которых нет вообще. 
//Подобное описание функций можно делать на самом верхнем уровне. То есть, функции внутри функций запрещены, 
// которые разрешены в PascalABC.NET. Это очень хорошо тем, что нет путаницы. Обратите внимание на параметры 
// функции. Эти параметры передаются по значению. То есть значение фактических параметров будет скопировано
// в значения формальных параметров. Обратите внимание, что нельзя написать "int a,b". Должны же быть какие-то недостатки. 
// У каждого параметра мы должны писать его тип. Иногда из-за этого сильно увеличивается заголовок функции.

{
    return a+b;
}


Обратите внимание, что нет никакой переменной result, как в Паскале. Для возвращения значения служит отдельная конструкция return, после которого должно быть указано, что возвращать. Данная конструкция эквивалентна следующему коду на Паскале

result:=a+b;
exit;


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

cout << Add(1,2);


Можно просто вызвать функцию и ее значение ничему не присвоить

add(2,3);


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

2+4;


И еще. Обратите внимание, что поясняющих комментариев в С++ нет. Если в Паскале мы писали "///", после чего писали поясняющий комментарий, который отображался при написании подпрограммы, то в С++ этого нет. Для того, чтобы это добавить есть три способа:

  1. позвонить Страуструпу и попросить его это добавить
  2. создать свой язык С++, но дополненный
  3. смириться с этим.

Ничего больше не дано.

Давайте теперь посмотрим, как сделать не функцию, а подобие процедуры.

void f(int a,int b) {
    cout << a+b;
}


Процедура начинается с типа возвращаемого значения void, которое показывает, что тип возвращаемого значения отсутствует.

Обратите внимание, что в данной функции нет return. Если функция ничего не возвращает, то тип возвращаемого значения void. Переменную этого типа создать нельзя. Он служит только для типа возвращаемого значения функции.

Также обратите внимание, что выполнение нашей функции/процедуры мы можем завершить раньше времени. Для этого нужно просто явно написать return без значения.

return;

И, если дальше что-то будет, то оно не будет выполнено.
Если мы напишем

? a=f(5,7);


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