21xrx.com
2024-11-05 17:24:25 Tuesday
登录
文章检索 我的文章 写文章
C++函数指针指向类成员函数
2023-06-29 03:42:33 深夜i     --     --
C++ 函数指针 类成员函数

C++中,函数指针可以指向任何函数。但是,如果我们想要指向类的成员函数,我们需要了解一些特殊的语法和规则。

首先,让我们看看一个简单的例子,来说明如何定义一个指向普通函数的函数指针:


void hello()

  std::cout << "Hello World!";

int main() {

  void (*fptr)() = &hello; //定义函数指针指向hello函数

  (*fptr)(); //调用hello函数

  return 0;

}

在这个例子中,我们定义了一个函数指针fptr,它指向一个没有参数和返回值的函数hello。然后,我们通过把&运算符应用于hello函数名,将hello函数的地址分配给了fptr。最后,我们可以通过使用(*)操作符来调用hello函数。

但是,如果我们想要指向一个类的成员函数,我们需要了解一些不同的语法和规则。因为成员函数的调用需要一个隐式的this指针,该指针指向类的对象。因此,我们需要为函数指针提供一个额外的参数,该参数是类的对象指针。下面是一个示例:


class MyClass {

public:

  void sayHello() {

    std::cout << "Hello World!";

  }

};

int main() {

  MyClass obj; //创建MyClass对象

  void (MyClass::*fptr)() = &MyClass::sayHello; //定义指向MyClass的成员函数的函数指针

  (obj.*fptr)(); //调用MyClass的sayHello函数

  return 0;

}

在这个示例中,我们定义了一个MyClass类,其中包含一个名为sayHello的成员函数。然后,我们创建了一个MyClass对象obj。接着,我们定义了一个成员函数指针fptr,它指向MyClass的sayHello函数。注意,fptr的定义使用了MyClass::*的语法,这表示它是一个指向MyClass的成员函数的指针。

最后,我们通过将obj对象和fptr指针组合起来,使用(*obj.*fptr)()语法来调用sayHello函数。注意,我们必须将obj放在fptr的左边,并使用.*运算符来解除指针和对象之间的间接性。

总之,C++函数指针可以指向类的成员函数,但是需要了解一些语法和规则。在函数指针中包含类的对象指针,使用类的成员函数指针需要特殊的语法解析。熟练掌握这些技术可以让我们更好地利用函数指针和类成员函数。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复