加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 父类成员函数的函数指针

发布时间:2020-12-16 09:31:14 所属栏目:百科 来源:网络整理
导读:我一直在尝试理解C中的函数指针,以便我可以在我的一个项目中成功使用它们.我遇到了逻辑问题.假设我们有两个类:父类和继承父类的子类. class Parent{ ...other stuff void (Parent::*ptr2func) (); ...other stuff}; 然后我们有一个子类: class Child : pub
我一直在尝试理解C中的函数指针,以便我可以在我的一个项目中成功使用它们.我遇到了逻辑问题.假设我们有两个类:父类和继承父类的子类.

class Parent{
    ...other stuff
   void (Parent::*ptr2func) ();
    ...other stuff
};

然后我们有一个子类:

class Child : public Parent{
       ...other stuff
       void afunc();
       ...other stuff
};

我想将父类的指针连接到子类的afunc()函数.在子类的构造函数中,我尝试这样做:

Child::Child()
  {
    ptr2func = &Child::afunc;
  }

这返回了一个预期的错误:
无法在赋值中将void(Child :: *)()转换为void(Parent :: *)().

我担心会发生这样的事情.但是我该如何克服这个呢?我不能将父类的成员函数的函数指针链接到子类的成员函数吗?正如您所理解的那样,我试图通过函数指针实现多态性,仅用于实验而不使用虚函数.我一直相信这是可能的.我的错是什么?或者它是不可能的?

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读