C++的成员指针平时不怎么用,虽然是冷僻的知识,但是还是值得去了解下。成员指针与一般指针的最大区别就是类内部是没有地址的,所以成员指针要理解为“类中偏移量”。
还是先贴出代码,比较好说。
class Simple{
public:
int a,b;
int f(float) const{return 1;}
int f(int) const{return 1;}
};
int (Simple::*fp)(float)const;
int main()
{
Simple s;
int Simple::*pmInt = &Simple::b;
s.*pmInt = 4; //s.b = 4
fp = &Simple::f;
(s.*fp)(1.0); //s.f(1.0)
Simple *sp = &s;
sp->*pmInt = 4; //sp->b = 4;
(sp->*fp)(1.0); //sp->f(1.0)
}
1,成员变量指针,int Simple::*pmInt = &Simple::b
这是把Simple
的b成员变量的类地址偏移量给了pmInt
然后s
可以通过这个指针变量来访问自己的成员变量b
。
2,成员函数指针,int (Simple::*fp)(float)const
是函数指针的定义,在main
函数里,需要对其赋值为成员函数的地址。