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

Как передать указатель на функцию через метод класса ? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ассоциативный массив на префиксных деревьях http://www.cyberforum.ru/cpp-beginners/thread1208312.html
Подскажите, существует ли контейнер или готовый класс, типа map, но основанный на префиксных деревьях? Нужно для быстрого поиска ключа. Я давно на дэльфях делал такой, но вдруг в сях уже есть готовое решение, что бы не писать свой велосипед.
C++ Рекурсия: вывести сначала прописные (большие), а потом строчные (маленькие) буквы текста в обратном порядке Помогите пожалуйста написать программу на С++. Текстовый файл состоит из слов, записанных через пробелы. Слова состоят из латинских букв и цифр. Вывести сначала прописные (большие), а потом строчные (маленькие) буквы в обратном порядке. Цифры не выводить. http://www.cyberforum.ru/cpp-beginners/thread1208309.html
C++ Заполнить матрицу по образцу
Задано число N. Заполнить матрицу по образцу. Пример при n=4 10 11 12 13 9 2 3 14 8 1 4 15 7 6 5 16
Fread и списки C++
Всем привет. Помогите, пожалуйста. Есть структуры: typedef struct Information{ int id; char name; char rbook; int admission; char rating; char date; struct Information *next;
C++ Разбор задачи на конструкторы http://www.cyberforum.ru/cpp-beginners/thread1208219.html
Привет всем! Такая проблема,есть лаба,не могу понять что она делает и зачем нужны три вида конструкторов.
C++ Составить программу на языке С++ для обработки строк с использованием указателей Дана строка. На печать выдать слова, которые имеют четную длину и одинаковые первую и последние буквы Добавлено через 13 секунд Help me! подробнее

Показать сообщение отдельно
vxg
Модератор
3024 / 1826 / 190
Регистрация: 13.01.2012
Сообщений: 6,929
15.06.2014, 08:00     Как передать указатель на функцию через метод класса ?
немного непонятно что вы хотите
если у вас есть обычная функция
C++
1
2
3
4
int f(int x)
{
    return x * x;
}
то указатель на нее будет выглядеть так
C++
1
int (*pf)(int x);
этот указатель можно хранить и вызывать в классе
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class t_1
{
public:
    int (*pf)(int x);
    void set_pf(int (*pf)(int x))
    {
        this->pf = pf;
    }
    int call_f(int x)
    {
        return pf(x);
    }
};
если вы хотите пользоваться указателем на функцию класса
C++
1
2
3
4
5
6
7
8
9
10
11
12
class t_2
{
public:
    int f_1(int x)
    {
        return x * x;
    }
    int f_2(int x)
    {
        return x * x * x;
    }
};
то это будет выглядеть так
C++
1
2
3
    int (t_2::*pf)(int x) = &t_2::f_2;
    t_2 obj_2;
    int y = (obj_2.*pf)(3);
можно даже поместить этот указатель в другой класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class t_3
{
public:
    t_2 *p;
    int (t_2::*pf)(int x);
    void set_obj_and_pf(t_2 *p, int (t_2::*pf)(int x))
    {
        this->p = p;
        this->pf = pf;
    }
    int call_p_pf(int x)
    {
        return (p->*pf)(x);
    }
};
и делать вызовы вот так
C++
1
2
3
4
    t_2 obj_2;
    t_3 obj_3;
    obj_3.set_obj_and_pf(&obj_2, &t_2::f_2);
    y = obj_3.call_p_pf(3);
 
Текущее время: 17:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru