21xrx.com
2024-12-23 00:25:45 Monday
登录
文章检索 我的文章 写文章
C++成员函数指针的用法详解
2023-06-24 05:12:31 深夜i     --     --
C++ 成员函数指针 用法 详解

C++中的函数指针是指一个指向函数的指针变量,可以将其作为参数传递给函数或存储在数组中。在类中,成员函数指针是一种特殊的函数指针,可以指向类成员函数。C++中的成员函数指针用法相较于普通函数指针需要注意以下几点:

1. 成员函数指针需要指定该成员函数所属的类,否则无法确定访问该成员函数的对象。例如:


class A {

public:

 void foo() cout << "foo" << endl;

};

void (A::*func_ptr)() = &A::foo;

在上述代码中,成员函数指针func_ptr指向了A类中的foo函数,而声明的时候需要用到A::*形式的语法,其中A是类名,*是特殊标识符,表示该指针可以指向类中的任意成员函数。

2. 对于虚函数,成员函数指针指向的是函数的地址,而不是虚函数表中的索引。虚函数指针则在调用时根据对象的实际类型动态确定函数地址,因此虚函数指针的用法与普通成员函数指针不同,需要声明为指向虚函数(即使用virtual关键字定义的函数)的指针。

3. 成员函数指针可以用于回调函数。因为函数指针可以存储在数组或向量等数据结构中,在需要执行特定的代码块时,可以通过指向某个类的成员函数指针来调用特定的函数。例如:


template <typename T>

class Callback {

public:

 typedef void (T::*func_ptr_t)();

 Callback(T& t, func_ptr_t func_ptr) : t_(t), func_ptr_(func_ptr) {}

 void operator()() {

  (t_.*func_ptr_)();

 }

private:

 T& t_;

 func_ptr_t func_ptr_;

};

class A {

public:

 void foo() cout << "foo" << endl;

};

int main() {

 A a;

 Callback<A> callback(a, &A::foo);

 callback();

 return 0;

}

在上述代码中,Callback类的构造函数接受一个对象和一个成员函数指针,并将它们存储到类的成员变量中。operator()函数则通过成员函数指针调用存储的成员函数,并将其作为回调函数执行。

成员函数指针在C++编程中非常有用,可以使代码更加灵活,并且在实现类似回调函数等机制时非常方便。但是,它们的语法比较复杂,需要仔细阅读C++标准,并进行适当的实践。

  
  

评论区

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