非成员函数应是友元函数,这样它才能直接访问类的私有数据。

Time operator+(const Time &t) const; //成员函数

也可以使用下面原型:

friend Time operator+(const Time &t1, const Time &t2); //友元

加法运算符需要两个操作数。对于成员函数版本来说,一个操作数通过this指针隐式传递,另一个操作数作为函数参数显式地传递;对于友元版本来说,两个操作数都作为参数来传递。

注意:非成员版本的重载运算符函数所需的形参数目与运算符使用的操作数目相同;而成员版本所需的参数数目少一个,因为其中一个操作数是被隐式地传递的调用对象。

这个两个原型都与T2+T3匹配。

T1 = T2 + T3;

转换为下面两个的任何一个:

T1 = T2.operator+(T3);
T1 = operator+(T2, T3);

记住,在定义运算符时,必须选择其中的一种格式,而不能同时选择这两种格式。因为这两种各种都是与同一个表达式匹配,同时定义这两个格式将被视为二义性错误,导致编译错误。

重载运算符:作为成员函数还是非成员函数相关推荐

  1. C++ Primer 第五版 第7章类 7.1——类讲解(成员函数、非成员函数、构造函数)

    习题答案请参考:C++ Primer 第五版 第7章类 7.1--类讲解(成员函数.非成员函数.构造函数)习题答案 目录 7.1 类讲解(成员函数.非成员函数.构造函数) 成员函数 this cons ...

  2. C++ Primer 第五版 第7章类 7.1——类讲解(成员函数、非成员函数、构造函数)习题答案

    理论讲解请参考:C++ Primer 第五版 第7章类 7.1--类讲解(成员函数.非成员函数.构造函数) 目录 7.1 定义抽象数据类型习题答案 7.4&7.5 7.6&7.7 7. ...

  3. C++中的成员函数与非成员函数

    1.成员函数和非成员函数 其实简单来说成员函数是在类中定义的函数,而非成员函数就是普通函数,即不在类中定义的函数,其中非成员函数比较典型的是友元函数. 2.详细解释 成员函数是类定义的一部分,通过特定 ...

  4. 重载运算符作为成员函数还是非成员函数

    一.定义为成员函数的运算符 1. 赋值.调用.下标.成员访问箭头运算符(=.().[].->) 2. 改变对象状态的运算符或者与给定类型密切相关的运算符(递增++.递减--.解引用*) 3. 复 ...

  5. 成员函数与非成员函数的使用与区分

    1.区分方式 成员函数与成员变量都是类当中的定义 函数.变量 在类中: 成员函数 成员变量 函数不在类中: 全局函数 2.局限性 全局函数无法访问类中的 私有成员 如果确实需要,那么需要将该函数声明为 ...

  6. (P22)运算符重载:运算符重载 ,成员函数重载 ,非成员函数重载 ,运算符重载规则

    文章目录 1.运算符重载 2.成员函数重载 3.非成员函数重载 4.运算符重载规则 1.运算符重载 运算符重载允许把标准运算符(如+.-.*./.<.>等)应用于自定义数据类型的对象 直观 ...

  7. 类的6个默认成员函数:构造函数、析构函数、拷贝构造函数、重载运算符、三/五法则

    文章目录 6个默认成员函数 构造函数 概念 默认构造函数的类型 默认实参 概念 默认实参的使用 默认实参声明 全局变量作为默认实参 某些类不能依赖于编译器合成的默认构造函数 第一个原因 第二个原因 第 ...

  8. C++ Primer 5th笔记(chap 14 重载运算和类型转换)函数匹配与重载运算符

    如果一个类既提供了转换目标是算术类型的类型转换,也提供了重载的运算符,则将会遇到重载运算符与内置运算符的二义性问题. 如果a是一种类型,表达式 a sym b 可能是: //不能通过调用形式来区分当前 ...

  9. 重载函数和重载运算符

    C++允许在同一个作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载. 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但他们的参数列表和定义(实现)不相 ...

最新文章

  1. java devexpress_Coolite与DevExpress比较
  2. javaScript小问题,托拽元素,获得当前鼠标的坐标
  3. LeetCode 24 Swap Nodes in Pairs(交换序列中的结点)
  4. VTK:可视化之SceneBounds
  5. Mysql JDBC 连接串参数说明
  6. [C语言 - 12] Union联合
  7. Linux驱动程序的数据封装
  8. 377. 组合总和 Ⅳ(JavaScript)
  9. 中文情感分析——snownlp类库 源码注释及使用
  10. linux之我常用的20条命令(之一)
  11. 转:初学 Java Web 开发,请远离各种框架,从 Servlet 开发
  12. 团队项目—第二阶段第五天
  13. echarts地图列表_Echarts 地图生成
  14. 【存储专题】西瓜哥带您学习高端存储
  15. 5财务分析的基本方法-盈利能力分析
  16. HTML入门笔记(案例+截图)
  17. Pytorch的一些小问题
  18. 华为交换机S5720-EI堆叠
  19. 大数据技术在我们日常生活中的应用
  20. Rockchip DRM RK628 Porting Guide

热门文章

  1. java中怎样将字符串转化为date_java如何将string类型转为date类型?怎样转?
  2. mysql 360 atlas_360 Atlas中间件安装及使用
  3. Spring-tx-@EnableTransactionManagement注解
  4. 定值保险计算举例_农村养老保险管理系统(在线查询)https://www.chashebao.com/yanglaobaoxian/17556.h...
  5. 易语言服务端与客户端怎么传送_配置中心是怎么推送的?动手实现一个 Long Polling 长轮询...
  6. fastJson工具类
  7. list 和 iterate
  8. 卸载驱动出现:rmmod: can't change directory to '/lib/modules': No such file or directory
  9. 微软发布Sample Browser for Windows 8版:5000示例代码,触手可及
  10. Winform中ComcoBox控件设置选定项