Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 47, средняя оценка - 4.89
Jess-i-ka
0 / 0 / 0
Регистрация: 08.02.2011
Сообщений: 9
#1

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

06.05.2011, 00:33. Просмотров 5764. Ответов 5
Метки нет (Все метки)

Ребята! пожалуйста помогите с примером указателя на функцию.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2011, 00:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатель на функцию (C++):

Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив) - C++
Изучаю c++ по одной книжке.Она говорить не умеет.. Так вот понадобилось написать функцию,которая как параметр получает указатель на...

В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель - C++
Друзья! Всем привет. Вот код: class otets { public: void f (void (otets::*p)()); private: void echo_f (){}; ...

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

Передача умного указателя в функцию принимающую указатель на указатель - C++
Итак имеется функция со следующим параметром: HRESULT __stdcall Function(SomeClass **param); В случае, когда создаём обычный...

Передать в неуправляемую функцию указатель на указатель - C++
Неуправляемая функция типа FUNC(int ** r); Делаю так fixed (int* ptr = arr) { FUNC((int **)ptr); ...

Указатель на функцию возвращающую указатель - C++
Всем привет. Подскажите, пожалуйста, пример не очень сложной программы, в которой встречается указатель на функцию, принимающую параметр...

5
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
06.05.2011, 00:46 #2
Что значит "с примером"?
Вот
C
1
void (*func)(void);
Объявление указателя на функцию, ничего не принимающую и ничего не возвращающую.
Задавайте конкретные вопросы, будете получать более конкретные ответы.
0
Jess-i-ka
0 / 0 / 0
Регистрация: 08.02.2011
Сообщений: 9
06.05.2011, 00:57  [ТС] #3
Спасибо конечно, но можете скинуть листинг с использованием указателя на функцию.
0
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
06.05.2011, 01:02 #4
массив указателей
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
#include<stdio.h>
#include<stdlib.h>
 
int CmpAsc(const void *a, const void *b){
    return *(int*)a-*(int*)b;
}
 
int CmpDesc(const void *a, const void *b){
    return *(int*)b-*(int*)a;
}
 
int main(){
    int mas[]={3,1,4,2}, i, j;
    int(*pMas[2])(const void*, const void*);
    pMas[0]=CmpAsc;
    pMas[1]=CmpDesc;
    for(i=0; i<sizeof(pMas)/sizeof(*pMas); ++i){
        qsort(mas, sizeof(mas)/sizeof(*mas), sizeof(*mas), pMas[i]);
        for(j=0; j<sizeof(mas)/sizeof(*mas); ++j){
            printf("%d ", mas[j]);
        }
        puts("");
    }
    return 0;
}
0
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
06.05.2011, 01:04 #5
Ну не знаю... Что-то вроде этого... Опять же, нужно больше конкретики.

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
 
void func1();
void func2();
void func3();
 
int main()
{
    setlocale(LC_ALL, "Rus");
 
    void (*pfunc)();
 
    int key;
 
    do
    {
        std::cout << "Какую функцию вы хотите вызвать?" << std::endl;
        std::cin >> key;
 
        switch (key)
        {
        case 1:
            pfunc = func1;
 
            break;
 
        case 2:
            pfunc = func2;
 
            break;
 
        case 3:
            pfunc = func3;
 
            break;
 
        default:
            std::cout << "Вы можете вызвать только функцию 1, 2 или 3! Попробуйте снова..." <<std::endl;
 
            break;
        }
    }
    while (key < 1 || key > 3);
 
    pfunc();
 
    return 0;
}
 
void func1()
{
    std::cout << "Я функция 1!" << std::endl;
}
 
void func2()
{
    std::cout << "Я функция 2!" << std::endl;
}
 
void func3()
{
    std::cout << "Я функция 3!" << std::endl;
}
1
olleg90
34 / 34 / 6
Регистрация: 06.01.2011
Сообщений: 90
06.05.2011, 14:15 #6
меню реализовано с помощью массива указателей на функцию
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include<conio.h>
#include<iostream>
#include<fstream>
 
using namespace std;
 
typedef float(*ptr)(int ,int ,int **);
 
float print_arr (int n,int m,int **A,int k,int l,int **B)
{
    cout<<"\nМассив A[N][M]:"<<endl;
    for (int i=0; i<m; i++)
    { cout<<endl;
    for (int j=0;j<n;j++)
        cout<<A[i][j]<<"\t";
    }
    cout<<"\n\nМассив B[K][L]:"<<endl;
    for (int i=0; i<k; i++)
    { cout<<endl;
    for (int j=0;j<l;j++)
        cout<<B[i][j]<<"\t";
    }
    return 0;
}
 
float arr_max (int n,int m,int **A)
{
int max=A[0][0];
for (int i=0; i<m; i++)
    {
    for (int j=0;j<n;j++)
    if (A[i][j]>max)
        max=A[i][j];
    }
cout<<"макcимальный элемент";
    return max;
}
 
float arr_min (int n,int m,int **A)
{
int min=A[0][0];
for (int i=0; i<m; i++)
    {
    for (int j=0;j<n;j++)
    if (A[i][j]<min)
        min=A[i][j];
    }
cout<<"минимальный элемент";
    return min;
}
 
float arr_sred (int n,int m,int **A)
{
int sum=0;
int min=A[0][0];
for (int i=0; i<m; i++)
    {
    for (int j=0;j<n;j++)
    sum+=A[i][j];
    }
    cout<<"среднее арифметическое";
    return (float)sum/(n*m);
}
 
 
 
void use (int n,int m,int **A,int k,int l,int **B, ptr f)
{
system ("cls");
if (f==NULL)exit (1);
cout<<" массива A = "<<f(n,m,A)<<endl;
cout<<" массива B = "<<f(k,l,B)<<endl;
}
 
 
void main ()
{setlocale (LC_ALL,"");
int n,m,k,l,**A,**B,i=1;
char file_name[20];
cout<<"введите имя файла в котором содержатся массивы: ";
cin>>file_name;
ifstream in (file_name);
//инициализация маccивa A
in>>n>>m;
A=new int *[n];
for(int i=0;i<m;++i)
A[i] = new int [i];
for (int i=0; i<m; i++)
    for (int j=0;j<n;j++)
        in>>A[i][j];
//инициализация маccивa B
in>>k>>l;
B=new int *[k];
for(int i=0;i<l;++i)
B[i] = new int [i];
for (int i=0; i<k; i++)
    for (int j=0;j<l;j++)
        in>>B[i][j];
 
while (1)
{
print_arr(n,m,A,k,l,B) ;
ptr menu[4]={NULL,arr_max,arr_min,arr_sred};
cout<<"\nМеню"<<
endl<<"1. максимальный элемент массива"<<
endl<<"2. минимальный элемент массива"<<
endl<<"3. среднее арифметическое"<<
endl<<"0. выход"<<endl;
cin>>i;
system ("cls");
if (i<0||i>3) cerr<<"Неверный пункт меню"<<endl;
else use (n,m,A,k,l,B,menu[i]);
}
}
0
06.05.2011, 14:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2011, 14:15
Привет! Вот еще темы с ответами:

Работа с файлом (передать указатель на файл в функцию, вернуть указатель на файл из функции) - C++
Подскажите как передать указатель на файл в функцию, как вернуть указатель на файл из функции. void Open() // из этой функции вернуть...

Как передать параметр типа "указатель на указатель" в функцию? - C++
#include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; #include &lt;iomanip&gt; using std::setiosflags; ...

Зачем передавать в функцию X указатель на callback функцию, если последняя ВНЕШНЯЯ и вызовется БЕЗО ВСЯКОГО УКАЗАТЕЛЯ? - C++
Собсно. То есть ребята, вот пример отсюда: http://www.cplusplus.com/reference/algorithm/count_if/ // count_if example #include...

Передача массива в функцию используя указатель на функцию - C++
У меня имеется готовая программа без передачи функции в функцию указателем, мне нужно передать функцию ввода масива в функцию его обработки...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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