Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как это перевести в нормальное выражение? https://www.cyberforum.ru/ cpp-beginners/ thread1291246.html
x /= x & -x; Я так понял то что "/=" это значит поделить. "-x" это минус, но только от чего???
C++ рекурсия не знаю как назвать сложения сумма функция C++
нужна рекурсивная функция которая решает введенную функцию в char, например пользователь ввел 5+6(8+2+4) , заметте перед скобкой ( он не ввел умножение * ,, в массиве он хранится как {'5',...
Не могу записать прочитать пробелы C++
Доброго времени суток!) Только начал С++... Пишу программу, столкнулся с проблемой при чтении из файла.. А именно при чтении не считываются пробелы, ка можно это исправить? Вот код.. using...
C++ Преобразование типов и методы класов Есть задача: 1)Создать класс Triangle, разработав следующие элементы класса: поля: int a, b, c; 2)Конструктор, позволяющий создать экземпляр класса с заданными длинами сторон 3)Методы,... https://www.cyberforum.ru/ cpp-beginners/ thread1291209.html
C++ Вставить число К1 после всех элементов, больших заданного числа, а число К2 – перед всеми элементами, кратными https://www.cyberforum.ru/ cpp-beginners/ thread1291206.html
Вставить число К1 после всех элементов, больших заданного числа, а число К2 – перед всеми элементами, кратными трем. void exercise_3_2() { int i; int size_of_array=10; int...
C++ Заполнение массива
Добрый день. Объясните,пожалуйста, следующий момент. Есть кусок кода: void fill(struct member *p){ printf("\nFill your name please: "); gets((*p).firstname); cout<<"\nEnter u'r...
Составить программу вычисления значения функции C++
Привет. Помоги пожалуйста составить программу вычисления значения функции f(x,y) для заданных значений a, b, c и произвольного x с автоматическим выбором необходимой формулы: f(x, y)=\begin{cases}...
C++ Описать класс для вычисления суммы Помогите пожалуйста написать программу. Описать класс, используя различные варианты доступа к данным (для реализации выбрать самостоятельно любые три варианты): все исходные данные закрыты;... https://www.cyberforum.ru/ cpp-beginners/ thread1291182.html
C++ Не работает randomize в Dev C++ https://www.cyberforum.ru/ cpp-beginners/ thread1291144.html
https://www.cyberforum.ru/attachment.php?attachmentid=450146&stc=1&d=1415027894
C++ Обработка отдельных строк (столбцов) матрицы и работа с диагоналями. Двумерные массивы Ввести целочисленный двумерный массив ANxM, вывести его. Найти сумму положительных угловых элементов. Найденной суммой заменить строку содержащую минимальный элемент и столбец, содержащий... https://www.cyberforum.ru/ cpp-beginners/ thread1291137.html
55 / 49 / 42
Регистрация: 18.07.2014
Сообщений: 194
0

Функция, получающая указатель на обычную функцию, получает указатель на метод класса

03.11.2014, 20:07. Просмотров 1728. Ответов 4
Метки (Все метки)


Здравтсвуйте.
Имеется вопрос по указателям на методы класса. Допустим, есть функция( f ), которая принимает указатель на функцию и запускает функцию через этот указатель. Есть класс, у которого есть метод. Этот метод я буду передовать в f. Этот метод должен изменять содержимое объекта, но так как f принимает указатель на обычную функцию, то, естественно, ничего не меняется( я вообще если честно не понимаю, почем программа не "падает" ведь метод должен менять значение члена объекта, но указатель this не передан, то есть метод, вызван как статический, хотя он ни капельки не статический ). Думаю, что я выразился косоязычно, поэтому привожу пример:

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
#include <iostream>
 
void start( void(*pfunc)() )
{
    (*pfunc)();
}
 
class C
{
public:
    C(): i(0) {}
    void myfunc()
    {
        std::cout << "C::myfunc()\n";
        i++;
    }
    int i;
};
 
int main()
{
    C obj;
    std::cout << obj.i << std::endl;
    void (C::*func)();
    func = &C::myfunc;
    start( reinterpret_cast<void(*)()>(func) );
    std::cout << obj.i << std::endl; //Здесь я хочу увидеть "1", но этот оператор вообще ничего не выводит
    return 0;
}
Как быть? И что делать с варнингами:
Код
/home/roma/Desktop/GameOfLife/GameOfLife/main.cpp:26: warning: converting from 'void (C::*)()' to 'void (*)()' [-Wpmf-conversions]
     start( reinterpret_cast<void(*)()>(func) );
                                            ^
прислушиваться к ним или "не видеть"?

Вернуться к обсуждению:
Функция, получающая указатель на обычную функцию, получает указатель на метод класса
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2014, 20:07
Готовые ответы и решения:

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

Функция, получающая подстроку, возвращает испорченный указатель на строку
Пытаюсь выделить подстроку в Microsoft Visual C++ 2013, чтобы убрать путь к файлу и оставить только...

Как передать указатель на функцию через метод класса ?
typedef void (*FuncCallback)(float* flValue); Пробовал по всякому и ни как: Class.CallFunc...

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

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