首页 > 编程语言 >在C++中,将类的成员函数(也称为方法)作为参数传递

在C++中,将类的成员函数(也称为方法)作为参数传递

时间:2024-05-23 21:07:12浏览次数:24  
标签:函数 成员 将类 C++ 参数传递 printValue MyClass 函数指针

在C++中,你可以将类的成员函数(也称为方法)作为参数传递,但这通常涉及到使用函数指针或者更现代的C++11及以后版本的std::function和lambda表达式。不过,更常见的是传递成员函数指针,但请注意,成员函数指针与常规函数指针在语法和使用上有所不同,因为成员函数需要访问类的特定实例(即对象)。

下面是一个简单的例子,展示了如何将类的成员函数作为参数传递:

 

#include <iostream>

class MyClass {
public:
    int x = 10;

    // 成员函数的声明
    void printValue() {
        std::cout << "Value of x: " << x << std::endl;
    }

    // 另一个成员函数,它接受一个指向MyClass成员函数的指针作为参数
    void callMemberFunction(void (MyClass::*memberFuncPtr)()) {
        (this->*memberFuncPtr)(); // 调用成员函数
    }
};

int main() {
    MyClass obj;

    // 传递成员函数指针给callMemberFunction
    obj.callMemberFunction(&MyClass::printValue);

    return 0;
}

 

在这个例子中,MyClass有一个成员函数printValue,它打印成员变量x的值。另一个成员函数callMemberFunction接受一个指向MyClass成员函数的指针作为参数,并使用这个指针来调用成员函数。在main函数中,我们创建了一个MyClass的实例obj,并将printValue函数的地址作为参数传递给callMemberFunction。

注意,当我们调用成员函数指针时,我们使用this->*memberFuncPtr的语法。这是因为成员函数指针需要知道它们应该在哪个对象上被调用(即它们需要一个*this指针)。this指针是隐式传递给每个非静态成员函数的,但在使用成员函数指针时,我们需要显式地提供它。

 

 

 

##############################

标签:函数,成员,将类,C++,参数传递,printValue,MyClass,函数指针
From: https://www.cnblogs.com/herd/p/18181178

相关文章

  • 单例模式c++实现
    单例模式是一种创建型设计模式,它保证一个类仅有一个实例,并提供一个全局访问点来访问这个唯一实例。下面是一个简单的C++实现单例模式的例子:cppincludeincludeclassSingleton{private:staticSingleton*instance;staticstd::mutexmtx;Singleton(){}//私有构造函......
  • c++ 语法 引用
      引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。C++引用vs指针引用很容易与指针混淆,它们之间有三个主要的不同:不存在空引用。引用必须连接到一块合法的内存。一旦引用被初始化为......
  • C++ 的 mutable 引出的一系列思考
    阅读多线程实战第六章第二节时,看到mutable关键词的使用,突然忘记它的含义=>  https://github.com/xiaoweiChen/CPP-Concurrency-In-Action-2ed-2019/blob/master/content/chapter6/6.2-chinese.md 进而引申到mutable的使用=> C++的mutable关键字......
  • Linux C++ IDE
    在linux下开发C++一般使用cmake,而我们也需要一个IDE来提高开发效率,之前使用过VSCode,这个需要装各种插件进行许多配置才能成为一个真正的IDE,后来知道了Clion是一个更好的选择。那么我们怎么使用呢?官网下载安装包,可以试用一个月,然后我们可以去淘宝买个共享帐号,我......
  • c++ 迭代器
     c++迭代器,可以理解成指针的泛化。迭代器与指针:迭代器(Iterator)是指针(pointer)的泛化,提供了对对象的间接访问。迭代器针对容器,而指针类型针对数组。迭代器与模板:模板使得算法独立于存储的数据类型,即任何数据类型都可以使用该程序设计。而迭代器使得算法独立于使用的容器类型,即任......
  • C++类中封装指针函数
      classMyClass{public:voidfunc1(){//实现}voidfunc2(){//实现}//成员函数指针类型typedefvoid(MyClass::*MemberFuncPtr)();//一个成员函数指针成员变量MemberFuncPtrptrFunc;......
  • C++高性能服务器框架—协程模块
    协程模块概述一、概念可以简单的认为:协程就是用户态的线程,但是上下文切换的时机是靠调用方(写代码的开发人员)自身去控制的;对比首先介绍一下为什么要使用协程。从了解进程,线程,协程之间的区别开始。从定义来看进程是资源分配和拥有的基本单位。进程通过内存映射拥有独立的代......
  • C++实现128位整数类
    如何编写一个128位的整数现在的大部分的计算机编程语言都包含了64位的有符号整数和无符号整数,有的甚至还提供了128位的整数和大数,比如:\(C\#\):System.Int128,System.UInt128\(Rust\):i128,u128但是在C/C++中并未发现uint128_t/int128_t,尽管在某些平台下可以看到__int1......
  • [20] C++虚幻引擎热更新
    Day1大纲行为树节点网络PDF网络系统内容Task节点FinishWithResult:MoveDirectlyToWard:PushPawnAction:运行至当前队列节点首节点 RunBehaviorDynamic:动态运行子行为树SetTagCooldown:WaitBlackboardTime:装饰器节点GamePlayTagCondition......
  • c++ 语法摘记
    目录c++语法摘记c++获取当前时间的三种方式c++运算符优先级c++语法摘记c++获取当前时间的三种方式c++运算符优先级......