fork download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Test {
  6. int m;
  7. public:
  8. Test(int i = 0):m(i){}
  9. void func1() const { cout << "Test::func1, m = " << m << "\n"; }
  10. void func2() const { cout << "Test::func2, m = " << m << "\n"; }
  11. };
  12.  
  13.  
  14. // Тип testfunc - указатель на функцию-член Test
  15. typedef void (Test::*testfunc)() const;
  16.  
  17. // Вызов для объекта tets функции f
  18. void out(const Test& t, testfunc f)
  19. {
  20. (t.*f)();
  21. }
  22.  
  23. void outPtr(const Test* t, testfunc f)
  24. {
  25. (t->*f)();
  26. }
  27.  
  28. int main() {
  29.  
  30. Test a(1), b(2);
  31. out(a,&Test::func1);
  32. out(b,&Test::func2);
  33. outPtr(&a,&Test::func2);
  34. outPtr(&b,&Test::func1);
  35. }
  36.  
  37.  
Success #stdin #stdout 0s 16064KB
stdin
Standard input is empty
stdout
Test::func1, m = 1
Test::func2, m = 2
Test::func2, m = 1
Test::func1, m = 2