Лекция 2

Функции

int abs(int x) {
    return x > 0 ? x : -x;  // После этого сразу выход из функции
}

// Функция, возвращающая void — процедура
void print(int i) {
    cout << "Значение = " << i;
}

Стандартные функции

Математические функции объявлены в заголовочном файле <cmath>.

#include <cmath>
abs(x);  floor(x);  sin(x);  pow(x, y);  sqrt(x);

inline-функции

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

inline int add(int a, int b) {
    return a + b;
}

int a = 3;
int c = add(a, 5);    // int c = a + 5;

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

Ссылки

Ссылка — другое имя объекта («псевдоним»). Ссылка всегда инициализируется при объявлении.

int i = 5;
int &pi = i;   // ссылка на i

pi = 3;
cout << i;     // i == 3

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

void calcSquareAndPerimeter(double a, double b, double &S, double &P) {
    S = a * b;
    P = 2 * (a + b);
}

int main() {
    double SS = 0.0, PP = 0.0;
    calcSquareAndPerimeter(3.0, 4.0, SS, PP);
    cout << "Perimeter: " << PP << ", Square: " << SS << "\n";
}

Структуры

struct Student {
    string name;
    int age;
};  // точка с запятой!

int main() {
    Student s {"Иванов", 19};               // Инициализация
    cout << s.name << ' ' << s.age << endl;

    Student s2 = s;                         // Независимая копия s
    s2.name = "Петров";
    cout << s.name;                         // "Иванов"
}

Передача структуры в функцию

Желательно передавать структуру в функцию по ссылке, иначе будет передана её полная копия; const запрещает изменение полей структуры.

void print(const Student &s) {
    cout << s.name << ' ' << s.age << endl;
}
  1. На главную