21xrx.com
2025-03-29 01:01:45 Saturday
文章检索 我的文章 写文章
C++成员函数指针的用法详解
2023-06-24 05:12:31 深夜i     12     0
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++标准,并进行适当的实践。

  
  

评论区

请求出错了