Форум программистов, компьютерный форум CyberForum.ru

Функциональный тип через typedef - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вывести список файлов в каталоге http://www.cyberforum.ru/cpp-beginners/thread589523.html
Напишите программу, которая составляет список файлов, расположенных в каталоге, имя которого задается в командной строке и создает текстовый файл, в котором имена файлов располагаются в порядке увеличения количества строк, содержащихся в них.
C++ компилятор с++ кто знает может можно сделать так чтоб компилятор не использовал фиксированных адресов, а использовал только относительное смещение? http://www.cyberforum.ru/cpp-beginners/thread589507.html
C++ Наследование: Создать класс двигатель
Создать класс двигатель, имеющий мощность. Определить конструкторы и метод доступа Создать класс автомашины, содержащий класс двигатель. Дополнительно есть марка (указатель на строку) и стоимость. Определить конструкторы и деструктор. Определить public- производный класс грузовик, имеющий грузоподъемность и тип кузова. Определить конструкторы и функцию печати. Где ошибка в программе? ...
C++ Сформировать массив из n элементов (n<50)
Задача 113. Сформировать массив из n элементов (n<50), которыми могут быть только целые числа 0 и 1. Проверить, существует ли строгое чередование 0 и 1.
C++ Задача 94. В заданном целочисленном массиве опре¬делить количество перемен знаков http://www.cyberforum.ru/cpp-beginners/thread589485.html
Задача 94. В заданном целочисленном массиве опре¬делить количество перемен знаков.
C++ Задача 75. Даны вещественные числа a и Ь (а<Ь). Сформировать матрицу ХУ Задача 75. Даны вещественные числа a и Ь (а<Ь). Сформировать матрицу ХУ(17,20), элементами которой являются вещественные случайные числа, равномерно распределенные на отрезке . Определить сумму элементов, номера строк которых кратны 3, а столбцов - 4. подробнее

Показать сообщение отдельно
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
28.05.2012, 21:41     Функциональный тип через typedef
смотрим на ваши кейсы. внутри них везде функции, которые принимают double и возвращают double.
т.е. нам нужны функции с сигнатурой double SomeFunc(double);
указатель на функцию можно считать функциональным типом.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// делаем так: тайпдефим указатель на функцию с упомянутой сигнатурой.
typedef double (*Function)(double); // имя нового типа - Function;
 
// Вот тут те самые три функции: напишу одну. остальные по аналогии:
// потом в коде можно будет писать так: Function func1 = &Func1;
double Func1(double x)
{
  return 3*pow(x, 2) - 1;
}
 
// Вот функция, куда передается такой функциональный тип. В коде это все функции,
// куда отдавалась переменная nf
void SuperFunc(Function func)
{
  // bla bla bla calculate x bla bla bla.
  // ну и раз мы определили аргумент для вызова, то переданную функцию func уже можно
  // вызывать:
  double result = func(x);
}
 
int main()
{
   // вот тут мы создаем массив фунциональных объектов и инициализируем его
   // указателями на конкретные функции:
   Function functions[] = {&Func1, &Func2, ... };
 
   // далее запрашиваем режим, по которому выберем нужную функцию из массива:
   int mode = 0; // это будет индекс конкретной функции из массива функций.
   cin << mode;
 
   // Собственно тут вытаскиваем нужную функцию из массива:
   Function func = functions[mode];
 
   // И передаем ее в суперфункцию:
   SuperFunction(func);
}
 
Текущее время: 05:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru