首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

什么是C++中的 - >*运算符?

在C++中,->*运算符是一个成员函数指针运算符,用于调用指向类成员函数的指针。它通常用于指向类成员函数的指针数组或容器中,以便在运行时动态地调用成员函数。

->*运算符的一般形式是:(pointer_to_object->*pointer_to_member_function)(arguments),其中pointer_to_object是指向类实例的指针,pointer_to_member_function是指向类成员函数的指针,arguments是成员函数的参数列表。

例如,假设我们有一个名为MyClass的类,其中有一个名为myFunction的成员函数。我们可以定义一个指向MyClass对象的指针和一个指向myFunction的指针,如下所示:

代码语言:cpp
复制
MyClass obj;
void (MyClass::*ptrToMyFunction)() = &MyClass::myFunction;

然后,我们可以使用->*运算符调用myFunction,如下所示:

代码语言:cpp
复制
(obj.*ptrToMyFunction)();

在这个例子中,obj是一个MyClass对象的实例,ptrToMyFunction是指向MyClassmyFunction成员函数的指针,(obj.*ptrToMyFunction)()调用myFunction函数。

需要注意的是,->*运算符只能用于指向类成员函数的指针,不能用于指向普通函数的指针。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

什么是运算符的重载?

前言 本文要点: 什么是运算符重载 为什么要重载运算符 哪些运算符不可以重载 哪些运算符不建议重载 应该遵循哪些原则 如何重载运算符 什么是运算符重载 如果还不知道什么是重载,可以参考《什么是函数重载...例如,+可以用于将整型或者浮点型相加,如果是自定义的两个对象,你却不能直接进行相加,不过你可以通过重载运算符赋予这个运算符新的定义, 说白了,原先的很多运算符只能作用于内置类型,通过重载就可以赋予它们更多的含义...为什么要重载运算符 前面也已经说了,操作符的重载可以让运算符作用于类类型的对象,而对于有些作用于对象的运算符,也可以在不改变含义的情况下自定义操作,那么为什么要这么做呢?...为了区分这两种情况,C++为后置版本增加了一个额外的int类型参数。...另外也重载也能非常明显地体现其含义,比如前面例子中的Water的相加,就显得不是特别好,Water相加是什么意思?

1.7K20
  • C++中运算符的重载

    我们之前提到过C++中的函数重载,可以根据形参的不同调用不同的函数,那么运算符重载跟函数重载的实现形式差不多,运算符重载的一般写法为返回值 operator运算符(参数列表)。...首先自定义一个 person 类,通过运算符重载,实现 对person 类的对象中 age 属性的一系列操作。...在这里如果对引用不是很清楚的可以移步另一篇文章:C++中指针与引用详解 - ZhiboZhao - 博客园 (cnblogs.com)。...因此返回值必须是 ostream 类型。...: 27 // 后置自增运算符的返回值 p2: name: 李四 age: 28 // 自增之后 3.2 全局函数写法 需要注意的是,由于全局函数不属于任何一个对象,因此形参为引用或者指针传递时才能修改原数据

    88800

    C++中运算符重载详解

    C++中运算符重载详解 在C++编程中,运算符重载是一种强大的工具,它允许程序员改变已有运算符的行为,使其适应自定义类型。这篇文章将从基础开始,逐步深入到运算符重载的高级应用,帮助你从入门到精通。...什么是运算符重载? 运算符重载是C++中的一种特性,它允许我们改变某些运算符的行为,使其能够操作用户定义的数据类型。 为什么需要运算符重载? 运算符重载可以使代码更简洁、易读,同时也能提高代码的效率。...通过重载+运算符,我们可以使代码更接近数学表达式,从而提高代码的可读性。 如何重载运算符? 在C++中,运算符重载是通过定义一个成员函数或者友元函数来实现的。...运算符重载的高级应用 在C++中,我们不仅可以重载算术运算符,还可以重载比较运算符、赋值运算符、输入/输出运算符等。这些高级应用可以使我们的代码更加强大和灵活。...运算符重载与友元 在C++中,友元是一种特殊的机制,它允许某个函数或类访问另一个类的私有或保护成员。

    18510

    (转载非原创)C++中运算符的重载

    我们之前提到过C++中的函数重载,可以根据形参的不同调用不同的函数,那么运算符重载跟函数重载的实现形式差不多,运算符重载的一般写法为返回值 operator运算符(参数列表)。...首先自定义一个 person 类,通过运算符重载,实现 对person 类的对象中 age 属性的一系列操作。...在这里如果对引用不是很清楚的可以移步另一篇文章:C++中指针与引用详解 - ZhiboZhao - 博客园 (cnblogs.com)。...因此返回值必须是 ostream 类型。...: 27 // 后置自增运算符的返回值 p2: name: 李四 age: 28 // 自增之后 3.2 全局函数写法 需要注意的是,由于全局函数不属于任何一个对象,因此形参为引用或者指针传递时才能修改原数据

    75820

    c++中条件运算符_单目运算符有哪些

    大家好,又见面了,我是你们的朋友全栈君。 条件运算符是C++中唯一一个三元运算符,要求有三个操作对象,条件表达式的一般形式为: 表达式1?...表达式2:表达式3 条件运算符的执行顺序是,先求解表达式1,若为真则求解表达式2,此时表达式2的值作为整个条件表达式的值。若表达式1的值为假,则求解表达式3,表达式3的值为整个条件表达式的值。...a : b a比b大时,关系表达式为真,条件表达式的值为a;b比a大时,关系表达式为假,条件表达式的值为b。...要注意的是,条件运算符的优先级是大于赋值运算符的,所以并不是关系表达式的结果赋值给bool型的max变量后执行条件表达式。...(ch+32):ch; cout <<ch <<endl; getchar(); getchar(); return 0 ; } 如果是大写字母,就转化为小写,如果是小写字母,结果不变。

    35610

    JavaScript 中的展开运算符是什么?

    展开运算符(Spread Operator)是 JavaScript 中的一种语法,用于将可迭代对象(如数组或字符串)展开为独立的元素。它使用三个连续的点号(...)作为操作符。...展开运算符可以在多种情况下使用,包括数组、对象和函数调用等。下面是一些展开运算符的用法示例: 1:展开数组: 使用展开运算符可以将一个数组展开为独立的元素。...3]; const copiedArray = [...originalArray]; console.log(copiedArray); // 输出: [1, 2, 3] 4:展开对象: 展开运算符还可以用于展开对象字面量中的属性...; const obj2 = { ...obj1, c: 3 }; console.log(obj2); // 输出: { a: 1, b: 2, c: 3 } 5:函数调用: 在函数调用时,展开运算符可以将一个数组作为参数展开为独立的参数...+ c; } const numbers = [1, 2, 3]; const result = sum(...numbers); console.log(result); // 输出: 6 展开运算符提供了一种方便的方式来处理数组

    92140

    C u002F C++ 中的运算符

    运算符是任何编程语言的基础。因此,如果不使用运算符,C/C++ 编程语言的功能是不完整的。我们可以将运算符定义为帮助我们对操作数执行特定数学和逻辑计算的符号。换句话说,我们可以说操作符操作操作数。 ...C/C++ 有很多内置的运算符类型,它们的分类如下: \   算术运算符:这些是用于对操作数执行算术/数学运算的运算符。示例:(+、-、*、/、%、++、–)。...例子: \ (a *= b) 可以写成 (a = a * b) 如果存储在 a 中的初始值为 5。则 (a *= 6) = 30。 “/=” :此运算符是 '/' 和 '=' 运算符的组合。...其他运算符:除了上述运算符,C 或 C++ 中还有一些其他运算符可用于执行某些特定任务。其中一些在这里讨论:  sizeof 运算符:sizeof 是 C/C++ 编程语言中经常使用的一种。...我们可以用条件运算符代替 if..else 语句的使用。要详细了解条件运算符,请访问此链接。 运算符优先级图表 下表描述了 C/C++ 中运算符的优先顺序和结合性。运算符的优先级从上到下递减。

    55630

    C++构造函数的作用_c++什么是构造函数

    所以看完这个博客不要就记住了构造函数的赋值作用,他还有其他很多的作用。 首先从本质上理解构造函数: 在 C++ 程序中,变量在定义时可以初始化。如果不进行初始化,变量的初始值会是什么呢?...而且,将全局变量自动初始化为 0,是程序启动时的一次性工作,不会花费多少时间,所以大多数 C++ 编译器生成的程序,未初始化的全局变量的初始值都是全 0。...函数被调用时,栈会分配一部分空间存放该函数中的局部变量(包括参数),这片新分配的存储空间中原来的内容是什么,局部变量的初始内容也就是什么,因此局部变量的初始值是不可预测的。...函数调用结束后,局部变量占用的存储空间就被回收,以便分配给下一次函数调用中涉及的局部变量。 为什么不将局部变量自动初始化为全 0 呢?...在C++中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。这种特殊的成员函数就是构造函数(Constructor)。

    1.5K20

    java中什么是重载什么是重写_java的重载

    大家好,又见面了,我是你们的朋友全栈君。...我们先从定义上区分重载和重写: 1、重载(overload)是发生在同个类中的具有相同的方法名,不同的参数类型(不同的参数类型包括:参数的个数和参数的类型和顺序不同),返回值相同或者不同的一种多态的体现...例如:下类Animal中的getFun方法构成了方法的重载 public class Animal{ public void getFun(){ System.out.println(“####...(2):子类必须重写父类中的抽象方法(abstract修饰的方法) (3):子类不能继承父类被private修饰的属性和方法 (4):子类不能继承父类的构造器 列:下列类B的方法doSomething重写了类...A的方法doSomething public class A{ public String doSomething(Stirng name){ System.out.println(“我是父类的方法

    1.6K10

    【C++】C++运算符重载的规则

    本篇博客讲解: 运算符重载的规则,以及实例 运算符重载的规则 被重载的运算符必须是已经存在的C++运算符,不能重载自己创建的运算符。 运算符被重载之后,原有功能仍然保留。...重载不能改变运算符运算对象的个数。 +运算符具有两个操作数,在+运算符函数作为类(例如上个例子中的CTime)的成员函数的时候,有一个参数是隐含的,也就是当前的对象,使用this指针来引用。...(成员访问运算符) *(成员指针访问运算符) ::(域运算符) sizeof(sizeof 是运算符,而不是函数) 不需要重载的运算符 =(赋值)和&(取地址符) 因为编译器会为每个类自动实现一个默认的赋值运算符...,但什么时候应该使用普通函数,什么时候应该使用成员函数方式呢?...欢迎转载,分享是进步的源泉。 转载请注明出处:http://chenhaoxiang.cn 本文源自【人生之旅_谙忆的博客】

    58830

    什么是Javascript中的提升

    所以,这里发生了什么?通常来说,人们会把提升解释为声明被移动到了代码的顶端。虽然看起来这是正在发生的事情,但是清楚的理解到底是如何才是重要的。...显然,代码没有被移动到任何地方,并没有被神奇的移动到文件的顶端。真正发生的事情是,在编译阶段,函数和变量的声明就被加入内存了。...在上面的例子中,正因为这个原因,才能在其代码出现的位置之前就访问或调用那个函数。...再看看变量的例子: 当声明并初始化一个变量,然后试图使用它时,典型的做法是: var a = 3; console.log(a); // 3 但是,如果把变量声明放在代码的底部会如何呢?...预想中的3没有打印出来,却成了 undefined。 为什么会这样?因为 JS 只会提升声明。而初始化赋值不会被提升。

    80530

    C++的性能救星,为什么是它?

    在C++中,类型系统的复杂性使得开发者可以精细地控制资源管理和性能优化。然而,这种复杂性也带来了不少性能负担。平凡类型作为一个特殊的类别,不仅提供了极简的内存管理模型,还能大幅提升程序性能。...本文将深入探讨什么是平凡类型,为什么它如此重要,以及它的优势与劣势。 平凡类型 平凡类型是指那些没有用户定义的构造函数、析构函数、拷贝构造函数和赋值运算符的类型。...内置变量中的平凡类型 C++的标准库为我们提供了许多内置类型,这些内置类中的平凡类型包括: 基础数据类型:int、char、float、double等基础数据类型都是平凡类型。...它们的底层本质是整型,构造和赋值操作都只是对整数值的操作。 C++标准库的std::array:std::array是一种固定大小的数组,它的类型是平凡类型。...对于类,仅在不涉及动态内存分配、虚函数或多态性的情况下才设计为平凡类型,通常为非平凡类型。 总结 综上所述,平凡类型是C++中性能优化的重要工具。

    6610

    什么是中台?

    本文链接:https://blog.csdn.net/pyycsd/article/details/102803260 没有中台的时代 在传统IT企业,项目的物理结构是什么样的呢?...什么是前台? 首先,这里所说的“前台”和“前端”并不是一回事。...所谓前台即包括各种和用户直接交互的界面,比如web页面,手机app;也包括服务端各种实时响应用户请求的业务逻辑,比如商品查询、订单系统等等。 什么是后台?...而这个中间组织,就是人们所说的 “中台”。 中台的领跑者 SuperCell是一家芬兰的手机游戏公司,这个名字或许有些陌生,但是说起下面几款游戏,大家一定会很熟悉: 部落冲突 ? 海岛奇兵 ?...是什么让SuperCell公司能够如此高效地试错和迭代呢?他们依靠的是强大的平台资源,支撑起各个游戏开发的小团队。 他们开发出的游戏看上去风格迥异,却存在许多共同之处。

    98210

    【C++】什么是类与对象?

    例如,当听到cu这个单词时,理发师的行为表现是剪发,演员的行为表现是停止表演等。不同的对象,所表现的行为是不一样的。 类 类是什么? 类是面向对象语言的程序设计中的概念,是面向对象编程的基础。...类是对某种对象的定义,具有行为(behavior),它描述一个对象能够做什么以及做的方法(method),它们是可以对这个对象进行操作的程序和过程。...注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别 C++中struct和class的区别是什么?...在C语言中,结构体的大小是由成员变量构成的,这我们很好理解,但在C++中,类的大小计算起来却看起来复杂的多,因为类中不仅包含了成员变量,还包含了成员函数,它们是如何存储在内存中的?...,而类中只有成员函数和类中什么都没有的大小是一样的.

    11210

    C++中的四种类型转换运算符

    隐式类型转换是安全的,显式类型转换是有风险的,C语言之所以增加强制类型转换的语法,就是为了强调风险,让程序员意识到自己在做什么。...由于 p 指向了 n,并且 n 占用的是栈内存,有写入权限,所以可以通过 p 修改 n 的值。有读者可能会问,为什么通过 n 和 *p 输出的值不一样呢?...这是因为 C++ 对常量的处理更像是编译时期的#define,是一个值替换的过程,代码中所有使用 n 的地方在编译期间就被替换成了 100。...更多关于 const 的内容请猛击《C++中的const又玩出了新花样》。...在《C++ RTTI机制下的对象内存模型(透彻)》一节中,我们讲到了有虚函数存在时对象的真实内存模型,并且也了解到,每个类都会在内存中保存一份类型信息,编译器会将存在继承关系的类的类型信息使用指针“连接

    29920
    领券