C++中类成员函数指针的继承
2007-12-26 15:13
267 查看
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++特性探寻-继承、成员函数、this指针
- 使用纯C函数指针调用C++的类成员函…
- C++成员函数的重载,继承,覆盖和隐藏
- 实例解析C++中类的成员函数指针
- C++成员函数指针的使用范例
- c++中的函数指针和类成员函数指针
- 如何使用c++的成员函数指针
- C++成员函数指针揭秘
- c++ 成员函数 成员函数指针 委托 封装成对象
- C++关于this指针、静态变量和静态成员函数 http://www.cnblogs.com/clrmas/archive/2010/03/23/1692893.htm
- 浅谈C++指针直接调用类成员函数
- C++非静态成员函数的this指针
- C++继承时子类定义同名成员变量时的调用继承函数的问题
- C++成员函数指针一种用法
- 使用纯C函数指针调用C++的类成员函数
- C++模板编程->成员函数指针模板参数
- C++虚函数多继承的虚函数表指针的测试
- C++中通过派生类调用第二基类的普通成员函数时this指针的调整
- [疑问]C/C++中为什么在类外利用多态基类指向派生类指针可以调用类的私有成员函数?
- C++ 类成员函数继承(virtual、非virtual)