• 并不要求递增和递减运算符一定是类的成员函数,但是因为这个运算符改变的正好是所操作的对象的状态,所以建议将它们设为成员函数。

  • 为了和内置版本保持一致,前置运算符应该返回递增或递减后对象的引用。

  • 为了和内置版本保持一致,后置运算符应该返回递增或递减前对象的值,而不是引用。

  • 递增和递减运算符应该同时定义前置和后置两个版本。

  • 普通的重载形式无法区分是前置运算还是后置运算,为了解决这个问题,后置版本加上一个额外的不被使用的 int 类型参数:

class StrBlobPtr
{public:// increment and decrement//前置版本StrBlobPtr& operator++();    // prefix operatorsStrBlobPtr& operator--();//后置版本StrBlobPtr operator++(int);  // postfix operatorsStrBlobPtr operator--(int);
};StrBlobPtr & StrBlobPt::operator++()
{check(curr,"increment past end of StrBlobPtr");++cur;return *this;
}StrBlobPtr & StrBlobPt::operator--()
{--cur;check(curr,"increment past end of StrBlobPtr");    return *this;
};//后置版本调用前置版本来完成
StrBlobPtr & StrBlobPt::operator++(int)
{StrBlobPt ret = *this;++*this;return ret;
}//后置版本调用前置版本来完成
StrBlobPtr & StrBlobPt::operator--(int)
{StrBlobPt ret = *this;--*this;return ret;
};

如果想通过函数调用的方式使用后置递增或递减运算符,则必须为它的整型参数传递一个值显式调用。

StrBlobPtr p(a);
p.operator++(0);  //后置版本
p.operator++();       //前置版本

C++ Primer 5th笔记(chap 14 重载运算和类型转换)递增和递减运算符相关推荐

  1. C++ Primer 5th笔记(chap 14 重载运算和类型转换)算术和关系运算符

    运算符 双目算术运算符 + (加),-(减),*(乘),/(除),% (取模) 关系运算符 ==(等于),!= (不等于),< (小于),> (大于>,<=(小于等于),> ...

  2. C++ Primer 5th笔记(chap 14 重载运算和类型转换)重载运算概述

    1. 定义 重载运算是具有特殊名字的函数,它们的名字由关键字operator和其后要定义的运算符号组成. 2. 运算符表 2.1 可重载运算符 运算符类型 运算符种类 双目算术运算符 + (加),-( ...

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

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

  4. C++ Primer 5th笔记(chap 14 重载运算和类型转换)二义性类型转换

    1. 在两种情况下会产生二义性转换歧义: 1.1 A类定义了一个接受B类对象的转换构造函数,同时B类定义了一个转换目标是A类的类型转换运算符. struct B; struct A {A() = de ...

  5. C++ Primer 5th笔记(chap 14 重载运算和类型转换)可调用对象与function

    1. 5种形式 可调用对象有5种形式,类型各不同: 形式 解释 函数 返回值类型和实参类型 函数指针 返回值类型和实参类型 lambda表达式 类类型 bind创建的对象 todo 重载了函数调用运算 ...

  6. C++ Primer 5th笔记(chap 14 重载运算和类型转换)lambda函数对象

    1. 定义 lambda是函数对象:编写一个lambda后,编译器会将该表达式转换成一个未命名类的未命名对象,类中含有一个重载的函数调用运算符. eg. stable_sort(words.begin ...

  7. C++ Primer 5th笔记(chap 14 重载运算和类型转换)函数调用运算符

    1. 定义 如果类定义了调用运算符(重载了函数调用运算符),则该类的对象被称作函数对象(function object),可以像使用函数一样使用该类的对象, eg. struct absInt{int ...

  8. C++ Primer 5th笔记(chap 14 重载运算和类型转换)成员运算符

    成员运算符分为两种: 解引用运算符* 箭头运算符-> 设计准则 箭头运算符必须是类的成员. 解引用运算符通常也是类的成员,尽管并非必须如此. 重载的箭头运算符必须返回类的指针或者自定义了箭头运算 ...

  9. C++ Primer 5th笔记(chap 14 重载运算和类型转换)类类型转换

    1. 定义 类型转换运算符:(既然一个类类型可以由实参类型对象隐式转换而来,那么)一个类类型的值也可以转换成其它类型 形式 : operator type() const type 表示某种类型,类型 ...

最新文章

  1. python下载大文件-golang/python 下载大文件时怎样避免oom
  2. 基于Serverless的云原生转型实践
  3. fat32 linux 打包工具_11款最棒的Linux数据恢复工具发布啦!
  4. 如何在Java中将毫秒转换为“ X分钟,x秒”?
  5. anki 新的卡片类型_Anki 常用操作方法合集(一)常用操作1
  6. msql查询姓名不带r的员工姓名_《MySQL数据库》关联查询
  7. vue-router个人总结
  8. baacloud无法连接到_加入 Beta 版“Baacloud88” - TestFlight - Apple
  9. 解决IE浏览器无法显示VUE项目的方法
  10. 亚马逊仓库部署机器人:每小时挑拣物品为过去三倍
  11. hotmail手机端_hotmail邮箱app下载
  12. 模电学习笔记(八)——差分放大器
  13. activiti工作流学习(二)
  14. 巨掌柜,新模式,新机遇!
  15. 3D模型欣赏:Hydra 3D角色 黑暗邪恶之感 相当吸睛 【3D游戏建模教程】
  16. 技术资源:国内知名技术网站网址
  17. Linux内存管理原理笔记
  18. EasyExcel实现excel的导入与导出
  19. LeetCode 图解 | 1214.查找两颗二分搜索树之和
  20. windows下发布Qt程序

热门文章

  1. Spring Data JPA_多表关联查询中应该注意的问题
  2. bootstrap获取表格中选中行的值_这才是No.1的Excel表格核对技巧
  3. android摄像头代码,Android摄像头
  4. 两大电网大手笔投建能源大数据中心,15省都有哪些落地案例?
  5. UPS对发电机组的影响
  6. 生鲜配送小程序源码_生鲜果蔬配送小程序开发源码
  7. python multiprocessing lock_python多进程Lock锁
  8. linux如何查看硬件驱动,linux查看硬件信息及驱动设备相关整理
  9. HighNewTech之QAB:重新温读张首晟教授2018年8月演讲PPT《量子计算, 人工智能与区块链》
  10. DL之Mask R-CNN:2018.6.26世界杯阿根廷队VS尼日利亚比赛2:1实现Mask R-CNN目标检测