箭头操作符(->)的通常用法是,使用一个类对象的指针来调用该指针所指对象的成员。左操作数为对象指针,右操作数为该对象的成员。定义重载箭头操作符之后看起来就有点特别,可以用类对象的指针来调用,也可以用类对象直接调用。

重载箭头操作符,首先重载箭头操作符必须定义为类成员函数。

箭头操作符可能看起来是二元操作符:接受一个对象和一个成员名,对对象解引用以获取成员。其实箭头操作符是一元操作符,没有显示形参(而且是类成员,唯一隐式形参是this)。->的右操作数不是表达式,而是对应类成员的一个标识符,由编译器处理获取成员工作(编译器对重载箭头操作符所做的事情,比其它重载操作符要多,这里也正是复杂的地方)。

下面这一段是《C++ Primer》重载箭头操作符的内容。

----------------------------------------华丽分割线----------------------------------------

重载箭头操作符

箭头操作符与众不同。它可能表现得像二元操作符一样:接受一个对象和一个成员名。对对象解引用以获取成员。不管外表如何,箭头操作符不接受显式形参。

这里没有第二个形参,因为 -> 的右操作数不是表达式,相反,是对应着类成员的一个标识符。没有明显可行的途径将一个标识符作为形参传递给函数,相反,由编译器处理获取成员的工作。

当这样编写时:

point->action();

由于优先级规则,它实际等价于编写:

(point->action)();

换句话说,我们想要调用的是对 point->action 求值的结果。编译器这样对该代码进行求值:

1.如果 point 是一个指针,指向具有名为 action 的成员的类对象,则编译器将代码编译为调用该对象的 action 成员。

2.否则,如果 point(注:中文版误写为action) 是定义了 operator-> 操作符的类的一个对象,则 point->action 与 point.operator->()->action 相同。即,执行 point 的 operator->(),然后使用该结果重复这三步。

3.否则,代码出错。

对重载箭头的返回值的约束

重载箭头操作符必须返回指向类类型的指针,或者返回定义了自己的箭头操作符的类类型对象。

如果返回类型是指针,则内置箭头操作符可用于该指针,编译器对该指针解引用并从结果对象获取指定成员。如果被指向的类型没有定义那个成员,则编译器产生一个错误。

如果返回类型是类类型的其他对象(或是这种对象的引用),则将递归应用该操作符。编译器检查返回对象所属类型是否具有成员箭头,如果有,就应用那个操作符;否则,编译器产生一个错误。这个过程继续下去,直到返回一个指向带有指定成员的的对象的指针,或者返回某些其他值,在后一种情况下,代码出错。

c++ 箭头符号怎么打_c++笔记--重载箭头运算符相关推荐

  1. c++ 箭头符号怎么打_C++随笔

    1.点(.)操作符和箭头(->)操作符 当定义类对象是指针对象时候,就需要用到 "->" 指向类中的成员:当定义一般对象时候时就需要用到 "." 指 ...

  2. c++ 箭头符号怎么打_C++编程基础知识二

    运算符: ①成员访问运算符:点运算符和箭头运算符: 点运算符:获取类对象的一个成员: 箭头运算符:ptr->mem 等价于(*ptr).mem; ②条件运算符:cond?expr1:expr2; ...

  3. c++ 箭头符号怎么打_C++语言中的标识符只能由字母、数字、下划线三种字符组成,且第一个字符_____。...

    [判断题]尺寸界线可以被隐藏 . . [判断题]AutoCAD 的绘圆心标记功能只是用于为圆或圆弧绘圆心标记或中心线,并不能标注尺寸. [判断题]将成本按其可辨认性分为直接成本与间接成本有利于分清各部 ...

  4. html向下的箭头符号怎么打,向下的箭头怎么打

    单位刚刚组织完体检,报告一出来,很多人不"淡定"了,几乎一半的同事血脂化验单上有向上的箭头,剩下的没有箭头,这都说明什么呢?哪些数据比较重要呢? 今天,就来聊聊,如何看血脂化验单? ...

  5. css竖向箭头符号_用css制作空心箭头(上下左右各个方向均有)

    css制作空心的上下左右的箭头 *{padding:0;margin:0; }.box{width:100px;height:500px;margin:0 auto;border:1px solid ...

  6. 电脑箭头,电脑箭头符号怎么打出来(往返箭头符号图案)

    打法是按住A!t加数字34148然后一起放手 alt+34148=�d alt+34149=�e alt+43144=� alt+43151=� alt+41459=◇ alt+41460=◆ alt ...

  7. html上下两个箭头符号怎么打出来,电脑箭头符号怎么打出来(往返箭头符号图案)...

    玩法是按住A!t加数字34148随后一起放手 alt 34148=卍 alt 34149=卐 alt 43144=▓ alt 43151=◤ alt 41459=◇ alt 41460=◆ alt 4 ...

  8. 【C++学习笔记四】运算符重载

    当调用一个重载函数和重载运算符时,编译器通过把您所使用的参数类型和定义中的参数类型相比较,巨鼎选用最合适的定义.(重载决策) 重载运算符时带有特殊名称的函数,函数名是由关键字operator和其后要重 ...

  9. es6箭头函数_javascript-ES6函数进阶(箭头函数,默认参数)(笔记)

    1.箭头函数 1.1 箭头函数,一行时,不用{} // 箭头函数,一行时,不用{} var t = ()=>console.log('t'); t() 1.2 传一个参数,可以省略() // 传 ...

最新文章

  1. 视频监控系统供电方式及选择方法
  2. 项目开发涉及循坏的小思路
  3. 【论文阅读整理】A Survey on Device-free Indoor Localization and Tracking in the Multi-resident Environment
  4. Jave之Scanner和不合法输入处理
  5. 关于JAVA并发编程你需要知道的——硬件篇
  6. (最新合集)计算机网络谢希仁第七版 第一章课后答案
  7. WeChall_PHP-Local File Inclusion(LFI)
  8. scala java抽象理解_scala – 抽象覆盖如何在Java代码方面起作用?
  9. php study 后门,phpStudy后门简要分析
  10. JDBC在Java Web中的应用——分页查询
  11. 汉王考勤系统服务器IP,汉王人脸识别考勤客户端使用说明
  12. matlab用图像,Matlab常用图像操作
  13. pytorch训练时报input size错误问题
  14. WPF - 简单的UI框架
  15. 口罩危机下的电商大考
  16. .NET程序集反编译器Reflector - 应用和平台 – 微软学生中心
  17. 小白也能看懂的XML简介
  18. t-learning 产品经理课程笔记
  19. python写打开的excel 冲突_在Python中打开excel文件时出错
  20. 危害与风险分析方法论 | HACCP 和 HAZOP

热门文章

  1. 华为MateBook16投屏设置
  2. jquery tableExport 插件导出excel (无乱码) 比较简单的表格
  3. python入门教学反思_Python语言教学反思
  4. 中职计算机技术教学计划,中职计算机应用基础教学计划.doc
  5. 拨号盘拨号数字间距太小 调大 修改通讯录里面收藏和所有联系人字体颜色
  6. spark streaming 整合kafka 报错 KafkaConsumer is not safe for multi-threaded access
  7. 工业革命的秋之涟漪(二):从飞桨,走向深度学习产业实践
  8. erp仓储管理 java,关于java:ERP仓库管理的操作与设计开源软件诞生20
  9. delphi 人脸比对_中控人脸/指纹机DEMO(delphi)
  10. 可控硅及其应用 -- 功率调节、电机调速