首页
学习
活动
专区
工具
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.6K20

C++运算符重载

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

85900

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

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

73520

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 ; } 如果大写字母,就转化为小写,如果小写字母,结果不变。

33210

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 展开运算符提供了一种方便方式来处理数组

50040

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

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

1.3K20

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++ 运算符优先顺序和结合性。运算符优先级从上到下递减。

52330

C++C++运算符重载规则

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

54630

java什么重载什么重写_java重载

大家好,又见面了,我你们朋友全栈君。...我们先从定义上区分重载和重写: 1、重载(overload)发生在同个类具有相同方法名,不同参数类型(不同参数类型包括:参数个数和参数类型和顺序不同),返回值相同或者不同一种多态体现...例如:下类AnimalgetFun方法构成了方法重载 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.5K10

C++什么类与对象?

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

6210

什么Javascript提升

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

77530

什么台?

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

94710

C++endl本质是什么

1. endl本质 自从在C语言教科书中利用Hello world程序作为学习起点之后,很多程序设计语言教科书都沿用了这个做法。我们写过第一个C++程序可能就是这样。...在头文件iostream,有这样一条申明语句:extern ostream& cout;这说明cout一个ostream类对象。...IO操作符本质自由函数,他们并不封装在某个类内部,使用时不采用显示函数调用形式。...:格式成员函数标准输出对象cout成员函数,因此在使用时必须和cout同时出现,而操纵符自由函数,可以独立出现,使用格式成员函数要显示采用函数调用形式,不能用IO运算符”>”形成链式操作...---- 参考文献 [1]陈刚.C++高级进阶教程[M].武汉:武汉大学出版社,2008[P326-P329] [2]C++之IO格式控制

82110

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

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

20720

c++template用法是什么

下文由ChatGPT生成 在C++,template一种通用编程工具,用于创建通用函数或类。通过使用模板,可以编写可以应用于不同数据类型函数或类,从而实现代码重用性和灵活性。...通过定义函数参数类型为模板参数,可以在函数调用时根据实际参数类型来推断模板参数类型。...a : b; } 在上面的代码,template 表示我们将要定义一个模板函数,T 一个模板参数,它表示函数可以适用于不同数据类型。...可以使用以下方式实例化类模板: Stack intStack; Stack stringStack; 在上述示例,intStack 一个 Stack 类实例,它可以存储...printType 函数一个通用模板函数,用于打印参数类型。

20120

什么C++最难学编程语言?

c++最大缺点让你花费大量时间学习这门语言语法上,而不是解决问题本身上 等我学会了C++我就回家结婚 这个世界本来就是残酷,所以你不能怪C++向你展示了世界本质 大家都觉得很难等你攀登到高峰时候发现...当然这其中有很多程序员自嘲语意多一点,但是C++的确难道很多英雄好汉,让很多在深陷其中无法自拔但又不舍得抽身离去。 为什么C++让人觉得这么难学?...但有一点不可否认,C++很多架构师最爱,也是很多编程大咖最爱,记得十年前在某著名编程网站论坛里面,特别是C++论坛里面经常见很多C++大咖在里面指导江山,很多小白忙活了半天代码,让大咖几句话搞掉...现在很多有名软件框架都能看到C++影子,其实很简单,在进行面向对象框架设计还能不影响效率首选只能C++,现在大家使用安卓手机框架层很多代码都是C++,还有大家天天使用浏览器内核代码几乎全是...C++,在很多领域C++有着不可比拟优势,学会了会明白为啥这门语言属于编程语言王者,为什么有这么多人学不会还要硬着头皮继续学,可以说C++一门啃着最有滋味编程语言,痛苦并快乐着。

2.1K31

C++移动赋值运算符

C++移动赋值运算符一种特殊赋值运算符,用于将资源从一个对象转移到另一个对象而不进行深拷贝。移动赋值运算符通常用于支持移动语义,以提高代码效率和性能。...通过使用右值引用,我们可以获取到要赋值源对象,并将其资源移动到目标对象。 在移动赋值运算符,通常会执行以下操作: 检查是否为自赋值情况,如果则直接返回当前对象。...以下一个简单示例代码,展示了如何定义和使用移动赋值运算符: #include class MyString { public: char* data; MyString...在移动赋值运算符,我们首先检查是否为自赋值情况,如果不是则释放当前对象资源,并将源对象资源指针赋值给目标对象data,然后将源对象资源指针置为nullptr。...这会触发移动赋值运算符调用,将资源从str1移动到str2,最终输出"Hello"。 使用移动赋值运算符可以避免不必要数据拷贝,特别是当对象拥有大量资源时,移动语义可以显著提高代码性能和效率。

29030
领券