C++中的成员函数指针(member function pointer)提供了对类成员函数进行动态访问的机制。比如定义如下的类:
class Base
{
public:
void baseFunc();
};
那么可以定义成员函数指针:
void (Base::*mfp)() = &Base::*baseFunc;
并且通过下面的语句执行baseFunc()函数:
Base* baseObject = new Base();
(baseObject->*mfp)();
稍微麻烦一点,我们也可以定义一个Base类的继承类:
class Inherited : public Base
{
public:
void inheritedFunc();
};
毫无疑问我们可以像定义基类指针一样定义继承类的类成员函数指针,当然,我们也可以直接通过基类类成员函数指针来访问子类的成员函数,只需要按照如下的方式转换一下即可:
void (Base::*mfp)() = (void (Base::*)())( &Inherited::inheritedFunc );
(如果不加转换直接赋值的话,可能会出现类似如下的错误 cannot convert from Inherited::* to Base::*, conversion requires reinterpret_cast, C-style cast or function-style cast.)
class Base
{
public:
void baseFunc();
};
那么可以定义成员函数指针:
void (Base::*mfp)() = &Base::*baseFunc;
并且通过下面的语句执行baseFunc()函数:
Base* baseObject = new Base();
(baseObject->*mfp)();
稍微麻烦一点,我们也可以定义一个Base类的继承类:
class Inherited : public Base
{
public:
void inheritedFunc();
};
毫无疑问我们可以像定义基类指针一样定义继承类的类成员函数指针,当然,我们也可以直接通过基类类成员函数指针来访问子类的成员函数,只需要按照如下的方式转换一下即可:
void (Base::*mfp)() = (void (Base::*)())( &Inherited::inheritedFunc );
(如果不加转换直接赋值的话,可能会出现类似如下的错误 cannot convert from Inherited::* to Base::*, conversion requires reinterpret_cast, C-style cast or function-style cast.)
本文详细介绍了C++中如何使用成员函数指针来动态访问类成员函数,包括基本定义及通过指针调用成员函数的方法,并展示了如何将基类的成员函数指针用于派生类。

被折叠的 条评论
为什么被折叠?



