Lef*_*ris 3 c++ function-pointers
我一直在尝试理解C++中的函数指针,以便我可以在我的一个项目中成功使用它们.我遇到了逻辑问题.假设我们有两个类:父类和继承父类的子类.
class Parent{
...other stuff
void (Parent::*ptr2func) ();
...other stuff
};
Run Code Online (Sandbox Code Playgroud)
然后我们有一个子类:
class Child : public Parent{
...other stuff
void afunc();
...other stuff
};
Run Code Online (Sandbox Code Playgroud)
我想将父类的指针连接到子类的afunc()函数.在子类的构造函数中,我尝试这样做:
Child::Child()
{
ptr2func = &Child::afunc;
}
Run Code Online (Sandbox Code Playgroud)
这返回了一个预期的错误:无法转换void (Child::*)()为void (Parent::*)()赋值.
我担心会发生这样的事情.但是我该如何克服这个呢?我不能将父类的成员函数的函数指针链接到子类的成员函数吗?正如您所理解的那样,我试图通过函数指针实现多态性,仅用于实验而不使用虚函数.我一直相信这是可能的.我的错是什么?或者它是不可能的?
A void (Parent::*)()采用Parent类型的对象.该函数Child::afunc需要Child类型的对象.void (Parent::*)()因此,将指针转换为允许无效调用.
成员函数指针实际上不能用于实现多态.在不使用virtual的情况下实现多态的传统方法是使用常规函数指针:
struct MyBaseClass
{
void (*function)(MyBaseClass* this_pointer);
};
Run Code Online (Sandbox Code Playgroud)