定义指向类里的数据成员时:
int ObjectClass::*pointerToMember = &ObjectClass::a;
因为仅仅提到了一个类而非那个类的对象,所以没有ObjectClass::a的确切“地址”,因而&ObjectClass::a仅是作为成员指针的语法被使用。
使用时:
object.*pointerToMember = 1; OR objectpointer->*pointerToMember=1;
定义指向类里的函数指针时:
int (ObjectClass::*fp) (int) = &ObjectClass::function;(这里的&不能省略,但是可以给出不含参数列表的函数标识符,因为重载方案可以由成员指针的类型决定)
使用时:
(object.*fp)(1); OR (objectpointer->*fp)(1);
在给成员指针初始化时,要写上类的名称 (&objectClass::function) 在类里面时候,可能认为没必要加类名写成 &function, 但是这不符合成员函数的语法。语法要求带上类名。
在间接引用时也要指明对象,如在类里可能认为写成 (*fp)(1)就行了,但是语法要求带上对象,(this->*fp)(1);
------------------------
以上内容都出自thinking in c++的第11章。
写在这里仅是为了总结一下看完这一章的收获。