Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_OOP.doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
4 Mб
Скачать

Inline определение_функции

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

Ограничение на inline-функции:

  • объявление и определение таких функций должны совпадать;

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

г) аргументы по умолчанию

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

Например,

void Line(int k, char s = ’*’) // s – аргумент по умолчанию

{int i;

for(i = 0; i < k; i++) cout << s;

}

Возможные обращения

Line(10); // выведутся 10 ‘*’

Line(50); // выведутся 50 ‘*’

Line(20,’!’); // выведутся 20 ‘!’

Можно задать несколько аргументов по умолчанию, но в списке они должны идти последними.

Например,

void Prx(double x, int k = 30, char s = ’*’) {...}

Возможны обращения

Prx(15.5); // x = 15.5, k = 30, s = ‘*’

Prx(x, 20); // x = x, k = 20, s = ‘*’

Prx(2 * x, 10, ’+’); // x = 2 * x, k = 10, s = ‘+’

Неверно обращение

Prx(5, , ’!’);

д) перегрузка функций

Это одно из проявлений полиморфизма в С++. Перегрузка функций – это использование одинаковых имен для однотипных функций.

Рассмотрим пример.

Пусть требуется написать 3 функции вывода:

  • массива a из m целых чисел;

  • длинного целого числа;

  • строки символов.

Начинаем работу с «придумывания имен», например:

void Printm(int * a, int m) для массива,

void Printl(long n) для длинного целого,

void Prints(char * s) для строки.

В С++ все эти 3 функции могут быть заданы одним именем.

void Print(int * a, int m),

void Print (long n),

void Print(char * s).

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

Print(“Hello!”); // функция Print(char *)

Print(a, 20); // функция Print(int *, int)

Print( 50l ); // функция Print(long)

е) передача функции константных параметров

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

Например,

void Func(const char * s)

{.....

s[0] = ’A’; // компилятор выдаст сообщение об ошибке

}

ж) константное возвращаемое значение

Рассмотрим пример

const char * GetName(); // объявление

void main()

{const char * cp = GetName(); // cp – указатель на константу

const char * np = “Иван”; // np – тоже указатель на константу

cp[2] = ’н’ // ошибка

cp = np; // можно: cp – не константа

...

}

const char * GetName()

{return “Дима”;}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]