C++成员函数指针

《C++ Primer》(5th)19.4

#include<iostream>
using namespace std;
class Foo
{
    public:
    int nv = 3;
    float fv = 4;
    double dv = 5;
    int method(int arg){
        cout<<"call Foo:method("<<arg<<")"<<endl;
        return arg;
    }
};
void func(int arg)
{
    cout<<"calling void func("<<arg<<")"<<endl;
}
int main(int argc,char* argv[])
{
    Foo obj,* po = &obj;

    int Foo::* pn;  // 定义成员指针
    pn = &Foo::nv;  // 绑定成员
    cout<<(bool)(typeid(obj.*pn) == typeid(int))<<endl; // 1
    cout<<po->*pn<<endl;    // 成员指针(A)被对象解引用就是解引用对象的成员A

    typedef decltype(&Foo::fv) PFLOAT_MEMBER;
    PFLOAT_MEMBER pf = &Foo::fv;                // 定义成员指针并绑定成员
    cout<<obj.*pf<<endl;

    auto pd = &Foo::dv; // 定义成员指针并绑定成员
    cout<<po->*pd<<endl;

    void (*func2)(int); // 函数指针
    func2 = func;       // 函数与函数指针之间存在自动转换规则
    func2(2);
    func2 = &func;
    func2(3);

    int (Foo::* pfunc)(int);    // 定义成员函数指针
    pfunc = &Foo::method;       // 绑定成员
    (obj.*pfunc)(6);            // 调用成员函数指针

    typedef decltype(&Foo::method) PMETHOD_MEMBER;
    PMETHOD_MEMBER pmethod;     // 定义成员函数指针
    pmethod = &Foo::method;     // 绑定成员
    (po->*pmethod)(7);          // 调用成员函数指针

    auto pmtd = &Foo::method;   // 初始化成员函数指针
    (obj.*pmtd)(8);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值