c++类中的函数指针

Function pointer in c++ class

本文关键字:函数 指针 c++      更新时间:2023-10-16

我试图在c++类中使用函数指针,但得到一个错误。

#include <cstdio>
#include <iostream>
using namespace std;
class abc{
public:
    void hello(){
        printf("Hello worldn");
    }   
    abc(){
        void (*hw)(void);
        hw = &hello;
        hw();
    }
}
int main()
{
    abc ab;
    return 0;
}
<标题> 错误
error: cannot convert ‘void (abc::*)()’ to ‘void (*)()’ in assignment

但是下面的代码为我工作,这是在代码库。谁能帮我找出区别吗?

void hello(){
    printf("Hello worldn");
}
int main()
{
    void (*hw)(void);
    hw = &hello;
    hw();
    return 0;
}

函数指针(不幸的是)与方法指针完全不同,正如错误试图表明的那样。这是因为方法工作的对象需要以某种方式传递进来,这使得方法从根本上不同于函数(并且显然影响了如何通过指针进行调用)。当使用多重/虚拟继承时,方法指针甚至不总是相同的大小(可能比函数指针大得多)。

您需要声明一个方法指针,并使用深奥的.*->*操作符之一来代表正确类型的对象调用它:

class abc {
public:
    void hello(){
        printf("Hello worldn");
    }   
    abc() {
        void (abc::*hw)();
        hw = &abc::hello;
        (this->*hw)();  // or (*this.*hw)()
    }
}