1234567891011121314151617181920212223242526272829303132333435363738394041
#include <iostream> using namespace std; //Pointer to class member class X { public: int visible; void print() const { cout << "\nhide = " << hide << " visible = " << visible; } void reset() { visible = hide; } void set(int i) { hide = i; } private: int hide; }; typedef void (X::*pfcn)(); int main() { X a, b, *pb = &b; int X::*pXint = &X::visible; pfcn pF = &X::print; a.set(8); a.reset(); b.set(4); b.reset(); a.print(); a.*pXint += 1; a.print(); cout << "\nb.visible = " << pb ->*pXint; (b.*pF)(); pF = &X::reset; (a.*pF)(); a.print(); cout << endl; getchar(); }
12
1>e:\vs_cpp\show_hide\show_hide\main.cpp(31): error C2440: 'initializing' : cannot convert from 'void (__thiscall X::* )(void) const' to 'pfcn' 1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1234567891011121314151617181920212223242526272829303132333435363738
#include <iostream> using namespace std; class X { public: int visible; void print() { cout << "\nhide = " << hide << " visible = " << visible; } void reset() { visible = hide; } void set(int i) { hide = i; } private: int hide; }; typedef void (X::*pfcn)(); int main() { X a, b, *pb = &b; int X::*pXint = &X::visible; pfcn pF = &X::print; a.set(8); a.reset(); b.set(4); b.reset(); a.print(); a.*pXint += 1; a.print(); cout << "\nb.visible = " << pb ->*pXint; (b.*pF)(); pF = &X::reset; (a.*pF)(); a.print(); cout << endl; return 0; }