21xrx.com
2024-12-22 21:34:51 Sunday
登录
文章检索 我的文章 写文章
C++ 中的类成员函数指针
2023-07-11 09:15:04 深夜i     --     --
C++ 成员函数 指针

C++ 是一种面向对象的程序设计语言,它支持类成员函数指针。类成员函数指针是指指向类成员函数的指针,它可以用来调用类的成员函数。

在 C++ 中使用类成员函数指针需要注意以下几点:

1. 成员函数指针的声明格式为:返回类型 (类名::*指针变量名)(参数列表)。其中,类名用于指定类,指针变量名为成员函数指针的变量名,参数列表为成员函数的参数。

2. 成员函数指针的赋值方式有两种:一种是直接赋值,另一种是通过类的对象指针或引用来赋值。例如:


class A {

public:

  int func(int x, int y) {

    return x + y;

  }

};

int main() {

  int (A::*ptr)(int, int) = &A::func;  // 直接赋值

  A obj;

  int (A::*ptr2)(int, int) = &A::func;  // 通过对象指针赋值

  int (A::*ptr3)(int, int) = &A::func;  // 通过对象引用赋值

  int result = (obj.*ptr)(3, 4);

  return 0;

}

3. 成员函数指针的调用方式是通过类的对象来调用,需要使用“.*”或“->*”运算符。例如:


class A {

public:

  int func(int x, int y) {

    return x + y;

  }

};

int main() {

  A obj;

  int (A::*ptr)(int, int) = &A::func;

  int result = (obj.*ptr)(3, 4);     // 使用“.*”运算符

  int result2 = (obj->*ptr)(3, 4);    // 使用“->*”运算符

  return 0;

}

4. 如果需要将成员函数指针作为函数参数传递,可以使用 typedef 来定义成员函数指针类型,然后使用该类型作为参数类型。例如:


class A {

public:

  int func(int x, int y) {

    return x + y;

  }

};

typedef int (A::*FuncPtr)(int, int);

void test(FuncPtr ptr, A& obj, int x, int y) {

  int result = (obj.*ptr)(x, y);

  std::cout << "result: " << result << std::endl;

}

int main() {

  A obj;

  FuncPtr ptr = &A::func;

  test(ptr, obj, 3, 4);

  return 0;

}

总之,类成员函数指针是 C++ 中非常重要的概念,它可以使我们更加灵活地调用类的成员函数。需要注意的一点是,使用成员函数指针时需要考虑函数的访问权限,私有成员函数只能在类内部调用。

  
  

评论区

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