Содержание
- 2. Обычно имеет смысл давать разным функциям разные имена. Если же несколько функций выполняет одно и то
- 3. Такой подход легко можно распространить на операции, определенные пользователем, т.е. на функции. Например: void print(int); //
- 4. При вызове функции с именем f компилятор должен разобраться, какую именно функцию f следует вызывать. Для
- 5. Например: void print(double); void print(long); void f() { print(1L); // print(long) print(1.0); // print(double) print(1); //
- 6. Правила сопоставления применяются в следующем порядке по убыванию их приоритета: Точное сопоставление: сопоставление произошло без всяких
- 7. Сопоставление с использованием стандартных преобразований, (например, int в double, derived* в base*, unsigned в int). Сопоставление
- 8. Пусть имеются такие описания функции print: void print(int); void print(const char*); void print(double); void print(long); void
- 9. Тогда результаты следующих вызовов print() будут такими: void h(char c, int i, short s, float f)
- 10. print('a'); // точное сопоставление: //вызывается print(char) print(49); // точное сопоставление: //вызывается print(int) print(0); // точное сопоставление:
- 11. Обращение print(0) приводит к вызову print(int), так как 0 имеет тип int. Обращение print('a') приводит к
- 12. Например: int pow(int, int); double pow(double, double); // из complex pow(double, complex); // из complex pow(complex,
- 13. void k(complex z) { int i = pow(2,2); // вызывается pow(int,int) double d = pow(2.0,2); //
- 14. Если найдены два сопоставления по самому приоритетному правилу, то вызов считается неоднозначным, а значит ошибочным. Эти
- 15. Неоднозначность вызова Неоднозначность может появиться при: преобразовании типа; использовании параметров-ссылок; использовании аргументов по умолчанию.
- 16. Пример неоднозначности при преобразовании типа: #include float f(float i){ printf( "function float f(float i)/n“); return i;
- 17. int main(){ float x = 10.09; double y = 10.09; printf(“%f \n”, f(x)); // Вызывается f(float)
- 18. Пример неоднозначности при использовании аргументов по умолчанию: #include int f(int a){return a;} int f(int a, int
- 19. Правила описания перегруженных функций. Перегруженные функции должны находиться в одной области видимости, иначе произойдет сокрытие аналогично
- 20. Шаблоны функций Многие алгоритмы не зависят от типов данных, с которыми они работают (классический пример —
- 21. Использование дополнительного параметра означает генерацию дополнительного кода, что снижает эффективность программы, особенно при рекурсивных вызовах и
- 22. В С++ есть мощное средство параметризации — шаблоны. Существуют шаблоны функций и шаблоны классов . С
- 23. Формат простейшей функции-шаблона: template заголовок{ /* тело функции */ } Вместо слова Type может использоваться произвольное
- 24. В общем случае шаблон функции может содержать несколько параметров, каждый из которых может быть не только
- 25. template void sort_vybor(Type *b, int n){ Type a; //буферная переменная для //обмена элементов for (int i
- 26. Главная функция программы, вызывающей эту функцию-шаблон, может иметь вид: #include template void sort_vybor(Type *b, int n);
- 27. for (i = 0; i cout double a[] = {0.22, 117, -0.08, 0.21, 42.5}; sort_vybor(a, 5);
- 28. Первый же вызов функции, который использует конкретный тип данных, приводит к созданию компилятором кода для соответствующей
- 29. Пример явного задания аргументов шаблона при вызове: template void f(Y, Z); void g(){ f ("Vasia", 3.0);
- 30. Чтобы применить функцию-шаблон к типу данных, определенному пользователем (структуре или классу), требуется перегрузить операции для этого
- 31. Рекурсивные функции Рекурсивной называется функция, которая вызывает саму себя. Такая рекурсия называется прямой. Существует еще косвенная
- 32. Для завершения вычислений каждая рекурсивная функция должна содержать хотя бы одну нерекурсивную ветвь алгоритма, заканчивающуюся оператором
- 33. Классическим примером рекурсивной функции вычисление факториала. Для того чтобы получить значение факториала числа n, требуется умножить
- 35. Скачать презентацию