21xrx.com
2024-12-22 21:44:42 Sunday
登录
文章检索 我的文章 写文章
C++中的函数指针:成员函数
2023-07-13 08:03:47 深夜i     --     --
C++函数指针 成员函数指针 函数指针作为回调函数 函数指针与Lambda表达式

C++是一种面向对象的编程语言,其中函数是面向对象编程的重要组成部分。在C++中,函数指针是一种指向函数而不是变量的指针。函数指针可以通过传递函数作为参数,让函数能够根据自己的需求调用其他函数,也可以用于在程序的不同部分之间传递函数调用。在C++中,函数指针可以指向普通函数、静态成员函数以及非静态成员函数。

在C++中,成员函数是一个类中的函数,可以被类的所有对象所调用。成员函数有两种类型:非静态成员函数和静态成员函数。非静态成员函数是一个类中的函数,可以访问类的非静态成员和静态成员。静态成员函数是一个类中的函数,可以访问类的静态成员,但不能访问类的非静态成员。

为了使用成员函数指针,我们需要声明一个指针变量,然后将成员函数地址赋给指针变量。在C++中,我们可以使用指向成员函数的指针来调用该函数,语法如下:


Class_name obj;

Return_type (Class_name::*ptr_name)(argument_type_list) = &Class_name::function_name;

(obj.*ptr_name)(arguments);

在上面的语法中,Class_name是该成员函数所在的类名称,obj是该类的一个对象,ptr_name是指向该成员函数的指针变量的名称,function_name是该成员函数的名称,Return_type是该成员函数的返回类型,argument_type_list是参数类型列表。使用该语法,我们可以通过函数指针与对象间接调用成员函数。

在C++中,我们还可以使用std::mem_fn函数来包装成员函数,并生成一个可调用的对象。例如,在下面的示例中,我们使用mem_fn函数将成员函数的地址包装为可调用对象,并使用该对象调用该函数:


#include <iostream>

#include <functional>

class MyClass {

public:

  void printNum(int num)

    std::cout << "Number is: " << num << std::endl;

  

};

int main() {

  MyClass obj;

  auto func = std::mem_fn(&MyClass::printNum);

  func(&obj, 42);

  return 0;

}

在上面的示例中,我们首先定义了一个MyClass类,并在该类中声明了一个printNum成员函数。然后,在main函数中,我们创建了一个MyClass对象obj,并使用std::mem_fn函数将printNum函数的地址包装为一个可调用对象func。最后,我们使用func对象调用printNum函数,并将42作为参数传递给该函数。

总之,C++中的函数指针是一种强大的工具,可以用于处理许多编程任务,包括动态回调、函数组合和函数对象的创建,成员函数指针是其中的一种,能够让我们通过函数指针调用类的成员函数。这项技术在很多情况下都是非常有用的。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复
    相似文章