指向父类成员函数的函数指针 我一直试图理解C++中的函数指针,这样我就可以在我的一个项目中成功地使用它们。不过我遇到了一个逻辑问题。假设我们有两个类:父类和继承父类的子类 class Parent{ ...other stuff void (Parent::*ptr2func) (); ...other stuff };

指向父类成员函数的函数指针 我一直试图理解C++中的函数指针,这样我就可以在我的一个项目中成功地使用它们。不过我遇到了一个逻辑问题。假设我们有两个类:父类和继承父类的子类 class Parent{ ...other stuff void (Parent::*ptr2func) (); ...other stuff };,c++,function-pointers,C++,Function Pointers,然后我们有一个儿童班: class Child : public Parent{ ...other stuff void afunc(); ...other stuff }; 我想将父类的指针连接到子类的afunc()函数。在子类的构造函数中,我尝试这样做: Child::Child() { ptr2func = &Child::afunc; } 这返回了预期的错误: 无法将分配中的void(子项::*)()转换为void

然后我们有一个儿童班:

class Child : public Parent{
       ...other stuff
       void afunc();
       ...other stuff
};
我想将父类的指针连接到子类的
afunc()
函数。在子类的构造函数中,我尝试这样做:

  Child::Child()
  {
    ptr2func = &Child::afunc;
  }
这返回了预期的错误: 无法将分配中的
void(子项::*)()
转换为
void(父项::*)()

我担心会发生这样的事。但是我该怎么克服呢?我不能将指向父类的成员函数的函数指针链接到子类的成员函数吗?正如您所理解的,我试图通过函数指针实现多态性,只是为了进行实验,而不使用虚拟函数。我被引导相信这是可能的。我犯了什么错?或者这是不可能的?

A
void(Parent::*)()
接受Parent类型的对象。函数
Child::afunc
需要Child类型的对象。因此,将指针转换为
void(父项::*)()
将允许无效调用

成员函数指针不能真正用于实现多态性。在不使用virtual的情况下实现多态性的传统方法是使用常规函数指针:

struct MyBaseClass
{
    void (*function)(MyBaseClass* this_pointer);
};

如果这种转换能够像调用子类中的函数一样工作,并且能够使用指向可能不是Child类型的父类的指针或引用,那么这将是危险的


如果要传递函数和指针/引用,可以使用boost::bind来实现它。

您真正想做的是什么?您已经设置了继承方案;为什么不使用
virtual
函数来获得多态性行为,而不是尝试用函数指针来破解某些东西呢?我同意Karl Knechtel的说法,可能是重复的。
virtual
关键字已经让编译器为您完成了所有艰苦的工作。对karl:我只是不想像我在问题中所说的那样使用虚拟函数。我想了解什么是可能的,什么是不可能的内在运作。查尔斯:是的,这里的解释似乎非常好。如果
Child::afunc
是父函数中虚拟函数的重写,那么它就可以工作了?哦,那么通过将指向类对象的指针作为我们想要实现多态性的每个函数的参数来传递,这就可以实现了,嗯?