- •Простые типы данных и операции над данными. Приведение типов.
- •Void - пустой тип, используется для создания указателей и указания того, что функция не возвращает значений;
- •Выражения сравнения и логические операции.
- •Операторы инкремента и декремента.
- •Составные типы данных: массивы и строки.
- •Составные типы данных: структуры, указатели на структуры.
- •Указатель на тип void и методы работы с ним.
- •Составные типы данных: структуры и объединения.
- •Условные операторы.
- •If (выражение) инструкция1;
- •If (выражение)
- •If (выражение) инструкция1;
- •Циклы, виды циклов. Вложенные циклы. Алгоритмизация циклических процессов.
- •Пользовательские функции, прототипы.
- •14. Указатели и ссылки. Ссылочные переменные.
- •Перегрузка функций.
- •Передача параметров в функцию и вызов функции.
- •1. Вызов функции.
- •2. О аргументах и параметрах
- •Передача указателей и массивов в качестве аргументов функций.
- •Использование указателя для обеспечения вызова по ссылке. Ссылочные параметры.
- •Стек и динамическая память.
- •Простые типы данных и операции над данными. Приведение типов. Константы, квалификатор const.
- •Указатели и динамическое распределение памяти.
Перегрузка функций.
Передача аргументов по ссылке и по значению. Перегрузка функций.
Алгоритм Евклида может быть использован не только для нахождения наибольшего общего делителя gcd(a,b)двух целых чисел a и b, но также для представления наибольшего общего делителя как целой линейной комбинации a и b. Т.е. если a и b целые и одновременно не равны нулю, то существуют такие целые числа x и y, что a∙x+b∙y=gcd(a,b).
Наша цель – определить функцию gcd(a,b,x,y)=d, где a и b числа, наибольший общий делитель gcd(a,b) которых мы ищем, d= gcd(a,b), а числа x и y обладают свойством a∙x+b∙y=d.
Во-первых, заметим, что функции gcd(a,b,x,y) и gcd(a,b) имеют одинаковый тип возвращаемого значения и одинаковое название, однако, отличаются по количеству аргументов, либо по типу аргументов. Это называется перегрузкой функции (overloading).
Во-вторых, числа x и y, переданные в функцию gcd(a,b,x,y), должны изменяться при выходе из нее. Если мы просто передадим их в функцию gcd(a,b,x,y) , то при выходе из нее их величины вернут свои прежние значения. Поясним это на простейшем примере двух функций, одна из которых меняет местами значения двух переменных, а другая увеличивает значение переменной на единицу.
int main(int argc, char* argv[])
{
int x = 3;
int y = 7;
std::cout << "Main. Before swap: " << std::endl;
std::cout << "x= " << x << std::endl;
std::cout << "y= " << y << std::endl;
swap (x,y);
std::cout << "Main. After swap: " << std::endl;
std::cout << "x= " << x << std::endl;
std::cout << "y= " << y << std::endl;
_getch();
return 0;
}
Функция swap (x,y) определена следующим образом:
void swap (int x, int y)
{
int temp;
temp = x;
x = y;
y =temp;
std::cout << "swap. After swap: " << std::endl;
std::cout << "x= " << x << std::endl;
std::cout << "y= " << y << std::endl;
}
Выполнить программу пошагово и просмотреть изменение переменных x и y в окне Local Variables и убедиться, что при выходе из функции данные переменные принимают свои первоначальные значения.
Аналогично можно определить функцию increase(x), увеличивающую значение x на единицу:
int main(int argc, char* argv[])
{
int x = 3;
std::cout << "increase(x)= " << increase(x) << std::endl;
std::cout << "Main. After increase : " << std::endl;
std::cout << "x= " << x << std::endl;
_getch();
return 0;
}
Функция increase(x) определена так:
int increase(int x)
{
x++;
std::cout << "increase. After increment: " << std::endl;
std::cout << "x= " << x << std::endl;
return x;
}
Выполнить программу пошагово и просмотреть изменение переменной x в окне Local Variables и убедиться, что при выходе из функции переменная принимает свое первоначальное значение.
Для того, чтобы данная процедура имела эффект переменные в функции надо передавать при помощи указателей или ссылок.