excerpted from C++ Primer
函数指针不能被赋值为成员函数的地址,即使返回类型和参数表完全匹配. 成员函数有一个非成员函数不具有的属性--它的类 (its class). 成员函数指针首先必须被绑定到一个对象或者指针上,才能得到被调用的对象的this指针,然后才调用指针所指的成员函数.
Q: 如何获得成员函数的地址?
A: &Class_name::member_function_name; 必须赋给成员函数的指针.
成员函数的指针和指向类数据成员的指针都要求扩展的书法, 它要考虑类的类型.
指向成员操作符的指针 (.* or ->*)
int (Screen::*pmfi) () = &Screen::height;
Screen & (Screen::*pmfS) (const Screen &) = &Screen::copy;
//直接调用成员函数
if ( myScreen.height() == bufScreen->height())
bufScreen->copy (myScreen);
//通过成员指针的等价调用
if( (myScreen.*pmfi) () == (bufScreen->*pmfi) () )
(bufScreen->*pmfS) (myScreen);
静态类成员的指针是普通指针, 因为它们没有this指针.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment