#include <iostream>
using namespace std;
class Foo
{
int x;
public:
Foo(int n) : x(n) { }
int foo(int y) { return x + y; }
int bar(int y) { return x * y; }
};
int main() {
int (Foo::* mp)(int) = &Foo::foo; // wskaźnik na metodę klasy
Foo a(5), b(17);
cout << (a.*mp)(3) << endl;
cout << (b.*mp)(3) << endl;
mp = &Foo::bar;
cout << (a.*mp)(3) << endl;
cout << (b.*mp)(3) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgRm9vCnsKCWludCB4OwpwdWJsaWM6CglGb28oaW50IG4pIDogeChuKSB7IH0KCWludCBmb28oaW50IHkpIHsgcmV0dXJuIHggKyB5OyB9CglpbnQgYmFyKGludCB5KSB7IHJldHVybiB4ICogeTsgfQp9OwoKaW50IG1haW4oKSB7CglpbnQgKEZvbzo6KiBtcCkoaW50KSA9ICZGb286OmZvbzsgLy8gd3NrYcW6bmlrIG5hIG1ldG9kxJkga2xhc3kKCUZvbyBhKDUpLCBiKDE3KTsKCWNvdXQgPDwgKGEuKm1wKSgzKSA8PCBlbmRsOwoJY291dCA8PCAoYi4qbXApKDMpIDw8IGVuZGw7CgltcCA9ICZGb286OmJhcjsKCWNvdXQgPDwgKGEuKm1wKSgzKSA8PCBlbmRsOwoJY291dCA8PCAoYi4qbXApKDMpIDw8IGVuZGw7CglyZXR1cm4gMDsKfQ==