- •Базовое ядро языка Элементы программы.
- •Комментарии
- •Инструкция – выражение
- •Инструкция
- •Определение функции
- •Заголовок функции
- •Прототипы функций
- •Аргументы по умолчанию.
- •Перегрузка функций
- •Встраиваемые функции
- •Стек до блока Вошли в блок Вышли из блока
- •Индексирование
- •Int a [100]; одномерный массив
- •Int b [3][5]; двухмерный массив
- •Int c [7][9][2]; трехмерный массив
- •Передача массивов функциям
- •Объявления ссылок и вызовов по ссылке
- •Функции-члены класса
- •Доступ: закрытый и открытый
- •Область видимости класса
- •Оператор разрешения области видимости ::
- •Вложенные классы
- •Статические члены данных
- •Указатель this
- •Функции-члены типа static и const.
- •Изменчивость (mutable)
- •Создание и уничтожение объектов
- •Классы с конструкторами
- •Конструкторы как преобразования
- •Создание динамического стека
- •Классы с деструкторами
- •Пример: динамически размещаемые строки
- •Ad hoc полиморфизм
- •Алгоритм выбора перегруженной функции
- •Перегрузка операторов
- •Перегрузка бинарных операторов
- •Перегрузка операторов присваивания и индексирования
- •Перегруженные операторы ввода-вывода « и »
- •Перегрузка оператора ( ) для индексирования
- •Операторы указателей
- •Указатель на член класса
- •Перегрузка new и delete
- •Наследование.
- •Методология объективно-ориентированного проектирования
- •Виртуальные функции
- •Абстрактные базовые классы
Определение функции
Заголовок функции
{ // тело
Инструкции // функции
} //
Заголовок функции
Тип Имя (Список_объявлений_параметров)
Тип - тип значения, возвращаемого функцией (если оно вообще возвращается)
Имя (Список_ объявлений_параметров) формальные параметры.
Формальные параметры – это то, вместо чего будут подставлены фактические параметры, передаваемые функции в момент ее вызова. После вызова функции значение аргумента используется в теле выполняемой функции. Значения аргументов копируются в соответствующие параметры функции, а сами переменные не изменяются в вызывающем окружении. в сущности, вызываемые по значению параметры являются локальными в своей процедуре.
Инструкция return
используется для возвращения управления и значения (если оно указано).
return; передает управление обратно вызывающее окружение.
return выражение управления и значение выражения передается в вызывающее окружение. Значение выражения должно допускать неявное преобразование к типу, указанному в заголовке определения функции. Например, return; return 25; return (a+b);
Прототипы функций
Прототипы функции – это ее объявление но не определение.Прототип функции имеет следующую форму записи:
Тип Имя (список_объявлений_аргументов);
Список_объявлений_аргументов может быть пустым, содержать единственное объявление или несколько объявлений, разделенных запятыми. Если функция не имеет параметров допускается использование ключевого слова void. В СИ++ функция с пустым списком параметров выглядит как: Имя_функции ( ).
Параметры прототипов:
int min (int, int); //имена параметров можно не указывать
int min (int k, int y);
Аргументы по умолчанию.
Формальному параметру может быть задан аргумент по умолчанию. Использование аргумента по умолчанию позволяет не писать его при каждом вызове. Например,
int sqr_or_power (int n, int k=2) // возведение в степень
{ if ( k= =2 ) return ( n*n ); else return (sqr_or_power (n, k-1)*n); }
Чаще всего эта функция используется для вычисления n в квадрате.
Только несколько последних параметров функции могут иметь значения по умолчанию.
void foo (int i, int j=7 ); // допустимо void foo (int i=3, int j ); // недопустимо
void foo (int i, int j=3, int k=7 ); // допустимо
void foo (int i=1, int j=2, int k=3 ); // допустимо
void foo (int i, int j=2, int k ); // недопустимо
Перегрузка функций
Перегрузка использует одно и то же имя для нескольких вариантов оператора или функций.
Выбор конкретного варианта зависит от типа аргументов, используемых оператором или в вызове функции.
Например,
// нахождение среднего значения элементов массива
double avg_arr (const int a[ ], int size)
{ int sum=0;
for (int i=0; i < size; i++)
sum + = a [i]; // выполняется сложение целых
return (static_east_<double>(sum)/size);
}
double avg_arr (const int a[ ], int size)
{ double sum = 0.0;
for (int i=0; i<size; i++)
sum + = a[i]; // сложение double
return (sum/size);
}
int main ( )
{int w[s]={1, 2, 3, 4, 5};
double x[s] ={1.1, 2.2, 3.3, 4.4, 5.5};
cout << avg_arr (w, 5) << ” – среднее значение для целых” << end l;
cout << avg_arr (x, 5)<< ” – среднее значение для double” << end l;
}
Компилятор выбирает функции в соответствии с типами аргументов и их количеством.