C++的成员指针

来源:互联网 发布:获取服务器ip和端口号 编辑:程序博客网 时间:2024/04/29 20:52

     如果不是读《C++编程思想》,恐怕我到今天也不会知道成员指针这东西,真是让我大开了眼界。按我的理解,普通指针指向的地址是相对于整个内存空间的,而成员指针并不包含真实的地址,它实际上代表了一个成员在其类范围内的相对位置。一个小程序可以解释成员指针的用法。

#include <iostream>
using namespace std;

class C
{
public:
    int i,j,k;
    void f()
    {
        cout<<i<<' '<<j<<' '<<k<<'/n';
    }
};

int main()
{
    C c;
    c.i = 1;
    c.j = 2;
    c.k = 3;
    C *pc = &c;

    int C::*pm = &C::j;
    cout<<c.*pm<<pc->*pm<<'/n';

    void (C::*pmf)() = &C::f;
    (c.*pmf)();
    (pc->*pmf)();
    return 0;
}

这段代码输出为22和1 2 3。pm定义为指向C类成员j的指针,在对象c上应用pm时将输出c对象的成员j的值。当然,对于private成员是不行的。pmf指向C的成员函数f,在对象c上调用pmf时,将调用成员函数f。原理并不复杂,只是尚不清楚在哪些场合适合用这种机制。