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

Указатели на функцию, операции .* и ->* - C++

Восстановить пароль Регистрация
 
2e1553ce
1 / 1 / 1
Регистрация: 16.12.2011
Сообщений: 47
20.01.2012, 22:31     Указатели на функцию, операции .* и ->* #1
Закомментируйте пожалуйста код в тех местах где пометил , что то запутался.
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
class A
{
     public:
     void f()
     {
           cout <<"hello";
     }
 
void Call(void(A::*pf)())   //аргумент у функции указатель на функцию?
{
     (*this.*pf)();            //что тут с указателями? =\
}
 
void ExtCall(A* pa, void(A::*pf()))  // что делает эта функция?
{
     (pa->*pf)();
}
void main()
{
     A a;
     void (A::*pf)()=&A::f(); //и в мейне эту строчку тоже было б супер
     ExtCall(&a,pf);
     a.Call(pf);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2012, 22:31     Указатели на функцию, операции .* и ->*
Посмотрите здесь:

указатели на функцию C++
C++ Использовать для работы с матрицами указатели и операции вида *p++, p++
C++ [Указатели]Использование операции получения адреса операнда
Указатели на функцию C++
C++ указатели на функцию
C++ Указатели на функцию
Ссылки и указатели на функцию C++
Передача в функцию через указатели C++
C++ Передача массива в функцию (указатели)
Задано число. Разместите в памяти последовательно все его цифры, используя указатели и операции над ними C++
C++ Указатели - разобрать функцию, принимающую параметр
C++ Реализовать функцию, сравнивающую указатели

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1740 / 1083 / 70
Регистрация: 13.09.2011
Сообщений: 3,104
20.01.2012, 23:25     Указатели на функцию, операции .* и ->* #2
И как оно у вас собиралось?
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
#include <iostream>
#include <string>
using namespace std;
 
class A
{
    string str;
public:
    A(string s)
    {
        str = s;
    }
    void f()
    {
        cout << str << endl;
    }
    
    void Call(void(A::*pf)())   //принимает указатель на метод
    {
        (*this.*pf)();            //вызов полученного метода для текущего объекта
    }
};
    
void ExtCall(A* pa, void(A::*pf)())
//тоже самое, только функция не является методом самого класса,
//получает указатель на объект в параметре
{
    (pa->*pf)();
}
int main()
{
    A a("hello");
    A b("world");
    void (A::*pf)()=&A::f; //берем указатель на метод
    a.Call(pf);
    ExtCall(&b,pf);
}
DU
1478 / 1054 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
20.01.2012, 23:29     Указатели на функцию, операции .* и ->* #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
33
34
35
36
37
38
39
40
#include <iostream>
 
using namespace std;
 
class A
{
public:
  void f()
  {
    cout <<"hello";
  }
 
  void ExtCall(A* pa, void(A::*pf)())  // что делает эта функция?
  {
    // В функцию передали указатель на объект типа A и указатель
    // на метод этого объекта (pf - имя этого указателя. так же как pa - имя указателя на A). метод имеет сигнатуру
    // void (), т.е. это метод класса A, который не принимает
    // аргументы и возвращает void, т.е. ничего не возвращает.
    //(pa->*pf) - разыменовывание указателя на метод. (pa - указатель на объект типа A)
    //(ra.*pf) - разыменовывание указателя на метод. (ra - ссылка на объекта типа A)
    // скобочки после разыменовывание - это вызов этого метода.
    (pa->*pf)();
  }
 
  // см каментарии выше
  void Call(void(A::*pf)())
  {
    (*this.*pf)();
  }
};
 
void main()
{
  A a;
  // Объявление переменной с именем pf которая имеет тип указателя на метод класса A,
  // Который ничего не принимает и ничего не возвращает.
  void (A::*pf)() = &A::f;
  ExtCall(&a, pf);
  a.Call(pf);
}
2e1553ce
1 / 1 / 1
Регистрация: 16.12.2011
Сообщений: 47
20.01.2012, 23:44  [ТС]     Указатели на функцию, операции .* и ->* #4
Спасибо , да это пример с лекций
Yandex
Объявления
20.01.2012, 23:44     Указатели на функцию, операции .* и ->*
Ответ Создать тему
Опции темы

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