#include <iostream>
using namespace std;
class Test
{
public:
void foo()
{
cout << "Test::foo called" << endl;
}
};
class Tester: public Test
{
public:
void boo()
{
cout << "Tester::boo called" << endl;
}
};
int main()
{
//объявляем тип указателя:
typedef void (Test::* pToFunc)();
//создаём объект этого типа и инициализируем его:
pToFunc pt = &Tester::boo;
// Можно и по указателю:
Test *test = new Test;
Tester *tester = new Tester;
(test->*pt)();
delete test;
delete tester;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIFRlc3QKewpwdWJsaWM6CiAgICAgdm9pZCBmb28oKQogICAgIHsKICAgICAgICAgIGNvdXQgPDwgIlRlc3Q6OmZvbyBjYWxsZWQiIDw8IGVuZGw7CiAgICAgfQp9OwoKY2xhc3MgVGVzdGVyOiBwdWJsaWMgVGVzdAp7CnB1YmxpYzoKICAgICB2b2lkIGJvbygpCiAgICAgewogICAgICAgICAgY291dCA8PCAiVGVzdGVyOjpib28gY2FsbGVkIiA8PCBlbmRsOwogICAgIH0KfTsKCmludCBtYWluKCkKewogICAgIC8v0L7QsdGK0Y/QstC70Y/QtdC8INGC0LjQvyDRg9C60LDQt9Cw0YLQtdC70Y86CiAgICAgdHlwZWRlZiB2b2lkIChUZXN0OjoqIHBUb0Z1bmMpKCk7CgogICAgIC8v0YHQvtC30LTQsNGR0Lwg0L7QsdGK0LXQutGCINGN0YLQvtCz0L4g0YLQuNC/0LAg0Lgg0LjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXQvCDQtdCz0L46CiAgICAgcFRvRnVuYyBwdCA9ICZUZXN0ZXI6OmJvbzsKCiAgICAgLy8g0JzQvtC20L3QviDQuCDQv9C+INGD0LrQsNC30LDRgtC10LvRjjoKICAgICBUZXN0ICp0ZXN0ID0gbmV3IFRlc3Q7IAogICAgIFRlc3RlciAqdGVzdGVyID0gbmV3IFRlc3RlcjsKCiAgICAgKHRlc3QtPipwdCkoKTsKCiAgICAgZGVsZXRlIHRlc3Q7CiAgICAgZGVsZXRlIHRlc3RlcjsKfQ==