Войти
ПрограммированиеFAQОбщее

Указатели на функции-члены классов дополнение

Указатели на функции-члены классов дополнение

В дополнение к этой заметке стоит сказать про случай объявления typedef внутри класса:

class Test
{
public:
     //объявляем тип указателя:
     typedef void (Test::* pToFunc)();

     //указатель на функцию
     pToFunc m_func;

     void foo()
     {
          cout << "Test::foo called" << endl;
     }
};

Тогда вызов функции через public переменную m_func будет менее тривиальным:

int main()
{
     //создаем объект класса Test
     Test test;

     //инициализируем указатель
     test.m_func = &Test::foo;

     //с помощью объекта вызываем функцию-член, обратите внимание на синтаксис
     (test.*test.m_func)();

     // Можно и по указателю:
     Test *test2 = new Test; 
     
     test2->m_func = &Test::foo;

     (test2->*test2->m_func)();
     delete test2;
}

22 февраля 2011 (Обновление: 11 мар 2011)