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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
rebus7000
0 / 0 / 0
Регистрация: 29.09.2013
Сообщений: 5
#1

Указатель на функцию - C++

04.10.2013, 17:30. Просмотров 516. Ответов 8
Метки нет (Все метки)

Скажите, пожалуйста, что такое в С++ указатель на функцию) Сколько инфы не читал - ничего не понял.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2013, 17:30     Указатель на функцию
Посмотрите здесь:

Функция, получающая указатель на обычную функцию, получает указатель на метод класса - C++
Здравтсвуйте. Имеется вопрос по указателям на методы класса. Допустим, есть функция( f ), которая принимает указатель на функцию и...

Шаблоны функции и указатель на функцию передаваемый в функцию - C++
Привет! Вопрос такой: Если я пишу сортировку, например, bubbleSort и хочу помимо массива и его размера передать ещё и указатель на функцию,...

Указатель на функцию - C++
При узачение Функции зашел в тупик. Прошу помочь разобраться . Вопрос ниже... #include <iostream> using namespace std; void...

Указатель на функцию - C++
Такая сточка кода: double (*ptr)(int, int); в контексте: double foo(int x, int y) { return x+y; }

указатель на функцию - C++
есть одна функция которая принимает указатель на функцию. я пытаюсь так сказать применить механиз MVC и все скрывать в классах, но как...

Указатель на функцию - C++
float ( *f)(float, float); float rosenbrock(float x1, float x2) { return 100*pow((x2-x1*x1),2)+pow((1-x1),2); } ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HedgehogLu
147 / 68 / 1
Регистрация: 04.09.2013
Сообщений: 260
04.10.2013, 18:31     Указатель на функцию #2
Указатель на функцию - это... ммммм. Это указатель на функцию.
Например сложный калькулятор.
В нем есть разные функции косинусы синусы и т.д.
Допустим этим функциям всегда передается параметров число типа дабл.
т.о прототип функции будет таким
C++
1
double myfunc(double);
пусть у нас есть описанная функция косинуса
C++
1
2
3
4
double cos(double x) {
.....
return result;
}
Таким образом мы для удобства вызова этих функций согласно их символьным названиям можем создать массив следующих структур.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct funcstr
{
  char *name;
  double (*func)(double);     
 };
....
//
funcstr functable[10]=
{"cos",&cos,....
....
"tg",&tg};
 
....
//тогда вызывать функции можно следующим образом
functable[i].func(x);
//просто используя их указатель
}
rebus7000
0 / 0 / 0
Регистрация: 29.09.2013
Сообщений: 5
04.10.2013, 18:42  [ТС]     Указатель на функцию #3
Спасибо, попытаюсь осмыслить)
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
04.10.2013, 18:54     Указатель на функцию #4
rebus7000, еще можно так осмыслить:
Например, есть такой алгоритм в стандартной библиотеке, как sort(iter_begin, iter_end, [pointer_to_func p]);
Так вот, необязательный параметр "р" - это может быть указатель на функцию, которая выполняет нужный вид сравнения ключей в массиве. Т.е. алгоритм sort() реализует семантику перебора диапазона [iter_begin; iter_end), а функция, адресуемая "р" уже определяет результат сравнения элементов из этого диапазона (например слова можно сортировать по длине, по алфавиту, натурально и т.д.)

Добавлено через 3 минуты
Пример. Только здесь вдобавок к функции еще и демонстрируется аналогичное использование функционального объекта, потому что их семантика одинакова
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
// sort algorithm example
#include <iostream>     // std::cout
#include <algorithm>    // std::sort
#include <vector>       // std::vector
 
bool myfunction (int i,int j) { return (i<j); }
 
struct myclass {
  bool operator() (int i,int j) { return (i<j);}
} myobject;
 
int main () {
  int myints[] = {32,71,12,45,26,80,53,33};
  std::vector<int> myvector (myints, myints+8);               // 32 71 12 45 26 80 53 33
 
  // using default comparison (operator <):
  std::sort (myvector.begin(), myvector.begin()+4);           //(12 32 45 71)26 80 53 33
 
  // using function as comp
  std::sort (myvector.begin()+4, myvector.end(), myfunction); // 12 32 45 71(26 33 53 80)
 
  // using object as comp
  std::sort (myvector.begin(), myvector.end(), myobject);     //(12 26 32 33 45 53 71 80)
 
  // print out content:
  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';
 
  return 0;
}
HedgehogLu
147 / 68 / 1
Регистрация: 04.09.2013
Сообщений: 260
04.10.2013, 18:59     Указатель на функцию #5
Да оба примера очень наглядно показывают где и как используются указатели на функции.
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
04.10.2013, 19:05     Указатель на функцию #6
Цитата Сообщение от HedgehogLu Посмотреть сообщение
Да оба примера очень наглядно показывают где и как используются указатели на функции.
Я и не спорю, но у вас пример довольно сложен для восприятия, согласитесь
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
04.10.2013, 19:06     Указатель на функцию #7
Цитата Сообщение от rebus7000 Посмотреть сообщение
что такое в С++ указатель на функцию
указатель - он и в Африке указатель
HedgehogLu
147 / 68 / 1
Регистрация: 04.09.2013
Сообщений: 260
04.10.2013, 19:19     Указатель на функцию #8
Ладно самое простое и понятное определение.
Указатель это переменная которая содержит адрес памяти в котором находятся данные того же типа как и указателя.
таким образом int* сдержит адрес памяти где содержатся данные типа int
Аналогично указатель на функцию содержит адрес где находится функция, точнее точка вызова этой функции.
Таким образом если для "обычных" типов данных по указателю мы получаем доступ к данным, то в случае с указателем на функции мы можем ее вызвать.
Вот собственно и все.
Все остальное это уже как следствие.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2013, 21:46     Указатель на функцию
Еще ссылки по теме:

Указатель на функцию - C++
подскажите пожалуйста в чём ошибка: объявляю указатель int (analizator::*q)(char); потом пытаюсь через него вызвать функцию ...

С++ - указатель на функцию. - C++
Вот такой вот кодик: int main() { int *x = (int*) printf(&quot;%s&quot;,&quot;fuck!!!&quot;); cout &lt;&lt; *x; getch();

Указатель на функцию - C++
Не могу понять данную запись. Image* NewImage(char* file); Она означает, что создается функция, которая возвращает ссылку на...

Указатель на функцию - C++
Здравствуйте! Есть вот такой элемент кода: SimpleCat* FunctionTwo (SimpleCat * theCat); int main() { .................... ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.10.2013, 21:46     Указатель на функцию #9
rebus7000, предположим, есть у вас три функции:
C++
1
2
3
int f1(int);
int f2(int);
int f3(int);
Чтобы получить указатель на такие функции, нужно взять прототип одной из них и слегка изменить:
C++
1
int (*f)(int); // f - указатель на функцию, которая принимает один int и возвращает int
Теперь можно делать так:
C++
1
2
3
4
5
6
7
8
f = f1;
f(3); // вызов f1;
    
f = f2;
f(4); // вызов f2;
    
f = f3;
f(5); // вызов f3;
Yandex
Объявления
04.10.2013, 21:46     Указатель на функцию
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru