• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++中点操作符和箭头操作符的使用详解

C++中点操作符和箭头操作符的使用详解

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++ 运算符,c++换行符,c++标识符,c++换行符怎么打,c++回车符等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

区别

C++中对于类来说,对于其中的成员,用点操作符.来获得,

而对于一个指向类对象的指针来说,则用箭头操作符->调用该指针所指向对象的成员。

当类定义->重载操作符后,则既可以用箭头操作符,也可以用点操作符。

重载->操作符

重载箭头操作符必须定义为类成员函数。没有显式形参(而且是类成员,唯一隐式形参是this)。->的右操作数不是表达式,而是对应类成员的一个标识符,由编译器处理获取成员工作。

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

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

代码分析:

下面给出代码,加深理解。

对于代码

</div>
输出的结果是:Action in class C!
这是因为pc是类对象指针,此时的箭头操作符使用的是内置含义,对pc解引用然后调用对象的成员函数action。

对于代码:

</div>
可以这样理解:

c是对象,c后面的箭头操作符使用的是重载箭头操作符,即调用类C的operator->()成员函数。此时返回的是类B的对象,所以调用类B的operator->()成员函数,B的operator->()返回的是指针,所以现在可以使用内置箭头操作符了。对B的operator->()返回的指针进行解引用,然后调用解引用后的对象的成员函数action,此时调用的就是类A的action()。这里存在一个递归调用operator->()的过程,最后再使用一次内置含义的箭头操作符。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 有关C++中类类型转换操作符总结(必看篇)
  • C++中求余运算符(%)示例详解
  • C++中运算符 &和&&、|和|| 的详解及区别
  • 深入解析C++编程中范围解析运算符的作用及使用
  • 深入解析C++编程中__alignof 与__uuidof运算符的使用
  • C++中赋值运算符与逗号运算符的用法详解
  • C++重载运算符的规则详解
  • C++中不能被重载的运算符介绍
  • C++中的异或运算符^的使用方法
  • C++按位异或运算符的使用介绍

相关文章

  • 2017-05-28C++中对象的赋值与复制操作详细解析
  • 2017-05-28错误:sem_union的存储大小未知问题的解决方法
  • 2017-05-28C语言 奇偶排序算法详解及实例代码
  • 2017-05-28C++采用openfilename打开文件对话框用法实例
  • 2017-05-28详解C++中基类与派生类的转换以及虚基类
  • 2017-05-28C/C++: Inline function, calloc 对比 malloc
  • 2017-05-28在C++中自定义宏的简单方法
  • 2017-05-28求32位机器上unsigned int的最大值及int的最大值的解决方法
  • 2017-05-28C++实现接两个链表实例代码
  • 2017-05-28C++ socket实现miniFTP

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++实现 单例模式实例详解
    • 16种C语言编译警告(Warning)类型的解决方法
    • C++用Dijkstra(迪杰斯特拉)算法求最短路径
    • SublimeText编译C开发环境设置
    • C++ new、delete(new[]、delete[])操作符重载需要注意的问题
    • C++模板类的用法实例
    • C语言求圆周率的简单实现方法
    • C++ read函数读入int整形数据
    • 解读堆排序算法及用C++实现基于最大堆的堆排序示例
    • c语言实现单链表算法示例分享

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有