指向类成员的指针练习

#include <iostream>

using namespace std;

class Widget
{
public:
    Widget()
    {
        pa[0] = &Widget::f;
        pa[1] = &Widget::g;
        pa[2] = &Widget::i;
        pa[3] = &Widget::j;
    }
    void select(int idx)
    {
        (this ->* pa[idx])();
    }
private:
    void f(){cout<<"void f()"<<endl;}
    void g(){cout<<"void g()"<<endl;}
    void i(){cout<<"void i()"<<endl;}
    void j(){cout<<"void j()"<<endl;}

    enum {cnt = 4};
    void (Widget::*pa[cnt])() = {f, g, i, j};

};

/*正常的函数指针数组
    void f(){cout<<"void f()"<<endl;}
    void g(){cout<<"void g()"<<endl;}
    void i(){cout<<"void i()"<<endl;}
    void j(){cout<<"void j()"<<endl;}

    void (*pa[])() = {f, g, i, j};
*/

int main()
{
    Widget w;
    w.select(2);
    return 0;
}

指向数据成员和成员函数的指针

#include <iostream>

using namespace std;
class B
{
public:
    void func()
    {
        cout<<"void func()"<<endl;
    }
    string name;
};

int main()
{
    string B::*ps = &B::name;//注意这个指针的写法,从始至终没有出现过对象,都是和类相关的
                             //其实本质就是从类的起始地址的偏移量
    B b;
    b.*ps = "china";
    cout<<b.*ps<<endl;

    void (B::*pf)(void) = B::func;
    (b.*pf)();


/****************************************************************************/
    B *pb = new B;//如果B是这么来的

    pb ->* ps = "canada";
    cout<<pb ->* ps<<endl;

    (pb ->*pf)();
    
    // '.*' 和 '->*':Member pointer selector 成员指针选择器 


}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值