这个里面需要注意的是对于双目运算符,像是加号,如果是复数加整数是一种情况,而整数加复数又是另一种情况,所以需要重定义两次。

而对于单目运算符,如果是前缀的,直接重定义就可以了,但是如果是后缀的,我们在声明的时候,加上一个 int 就行了。

  1. #include <iostream>
  2. using namespace std;
  3. class Date
  4. {
  5. public :
  6. Date() {
  7. year=0;
  8. month=0;
  9. day=0;
  10. }
  11. Date(int y,int m,int d)
  12. {
  13. year = y;
  14. month = m;
  15. day = d;
  16. }
  17. void display()
  18. {
  19. cout<<year<<"/"<<month<<"/"<<day<<endl;
  20. }
  21. friend Date operator+(int i, Date c);
  22. friend Date operator+(Date c, int i);
  23. Date operator++();
  24. Date operator++(int);
  25. private:
  26. int year,month,day;
  27. };
  28. Date Date::operator++()
  29. {
  30. if (day+1>30) {
  31. day %= 30;
  32. if (month+1>12) {
  33. month %= 12;
  34. year++;
  35. }
  36. }
  37. else
  38. day++;
  39. return *this;
  40. }
  41. Date Date::operator++(int)
  42. {
  43. Date temp(*this);
  44. if (day+1>30) {
  45. day %= 30;
  46. if (month+1>12) {
  47. month %= 12;
  48. year++;
  49. }
  50. }
  51. else
  52. day++;
  53. return temp;
  54. }
  55. Date operator+(int i,Date c)
  56. {
  57. int year_add = i / 360;
  58. int month_add = i / 30;
  59. int day_add = i % 30;
  60. c.year += year_add;
  61. c.month = c.month + month_add % 12;
  62. if (c.month>12)
  63. c.month -= 12;
  64. c.day = c.day+day_add % 30;
  65. if (c.day>30)
  66. c.day -= 30;
  67. return c;
  68. }
  69. Date operator+(Date c,int i)
  70. {
  71. int year_add = i / 360;
  72. int month_add = i / 30;
  73. int day_add = i % 30;
  74. c.year += year_add;
  75. c.month = c.month + month_add % 12;
  76. if (c.month>12)
  77. c.month -= 12;
  78. c.day = c.day+day_add % 30;
  79. if (c.day>30)
  80. c.day -= 30;
  81. return c;
  82. }
  83. int main()
  84. {
  85. Date a(2018,3,10),b;
  86. int num=1000;
  87. b=a+num;
  88. b.display();
  89. ++b;
  90. b.display();
  91. a = b++;
  92. a.display();
  93. b.display();
  94. system("pause");
  95. return 0;
  96. }

c++类的单目和双目运算符的重定义的更多相关文章

  1. Golang的单目(一元)运算符-地址操作符和接收操作符

    Golang的单目(一元)运算符-地址操作符和接收操作符 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Golang的单目(一元)运算符概述 常见的地址操作符: &: ...

  2. 单目、双目和RGB-D视觉SLAM初始化比较

    无论单目.双目还是RGB-D,首先是将从摄像头或者数据集中读入的图像封装成Frame类型对象: 首先都需要将彩色图像处理成灰度图像,继而将图片封装成帧. (1) 单目 mCurrentFrame = ...

  3. 机器视觉学习笔记(5)——基于OpenCV的单目摄像机标定

    本文CameraCalibrator类源代码来自于OpenCV2 计算机视觉编程手册(Robert Laganiere 著 张静 译) 强烈建议阅读机器视觉学习笔记(4)--单目摄像机标定参数说明之后 ...

  4. CPP-基础:单目运算符重载

    关于++运算符前置和后置重载的实现实例: #include <iostream> using namespace std; //创建时钟类 class Clock { public: Cl ...

  5. ISO/IEC 9899:2011 条款6.5.3——单目操作符

    6.5.3 单目操作符 语法 1.unary-expression: postfix-expression ++  unary-expression --  unary-expression unar ...

  6. Semantic Monocular SLAM for Highly Dynamic Environments面向高动态环境的语义单目SLAM

    一.摘要 当前单目SLAM系统能够实时稳定地在静态环境中运行,但是由于缺乏明显的动态异常处理能力,在动态场景变化与运动中往往会失败.作者为解决高度动态环境中的问题,提出一种语义单目SLAM架构,结合基 ...

  7. ORB-SLAM3 细读单目初始化过程(上)

    作者:乔不思 来源:微信公众号|3D视觉工坊(系投稿) 3D视觉精品文章汇总:https://github.com/qxiaofan/awesome-3D-Vision-Papers/ 点击上方&qu ...

  8. 基于OpenCV单目相机的快速标定--源码、工程、实现过程

    相机的标定是所有人走进视觉世界需要做的第一件事,辣么多的视觉标定原理解释你可以随便在网上找到,这里只讲到底如何去实现,也算是给刚入门的朋友做个简单的分享. 1.单目相机标定的工程源码 首先请到同性交友 ...

  9. python魔法方法-单目运算及一般算数运算

    在比较的魔法方法中,我们讨论了魔法方法其实就是重载了操作符,例如>.<.==等.而这里,我们继续讨论有关于数值的魔法方法. 1.单目运算符或单目运算函数 __pos__(self) 实现一 ...

随机推荐

  1. 51nod1174【基于线段树的RMQ】

    很基础啊~ #include <bits/stdc++.h> using namespace std; typedef long long LL; const int INF=-0x3f3 ...

  2. Codeforces404C【构造】

    题意: 一个图有n个点,每一个点最多连接k条直线,给出多有起点到终点的距离,没有环,不能输出重边,输出所有有连接的单向边 思路: 就是简单想-不知道怎么说了,画个图,我们建边,那么距离是 i 就是连距 ...

  3. python __builtins__ credits类 (15)

    15.'credits', 信用 class _Printer(builtins.object) | interactive prompt objects for printing the licen ...

  4. dd 使用记录

    使用dd的工具 1)测试写速度 2)测试读速度 3)测试读写速度 dd说明: if是输入文本,of是输出文本,bs是块大小,count是你指定读写块的数量 /dev/zero是从内存里面读取,不会产生 ...

  5. Json----Jackson 下载地址

    下载地址: http://repo1.maven.org/maven2/com/fasterxml/jackson/

  6. bzoj2154||洛谷P1829 Crash的数字表格&&JZPTAB && bzoj3309 DZY Loves Math

    bzoj2154||洛谷P1829 https://www.lydsy.com/JudgeOnline/problem.php?id=2154 https://www.luogu.org/proble ...

  7. js 获取最后一个字符

    方法一: str.charAt(str.length - 1) 方法二: str.subStr(str.length-1,1) 方法三:    var str = "123456" ...

  8. 【前端】模拟微信上传图片(带预览,支持预览gif)

    一.Html <style type="text/css"> #previewDiv{width:50px;height:50px;overflow:hidden;po ...

  9. laravel 配置站点域名

    访问一直报404错误 laravel端: default.conf server {        listen       80;        server_name  api.xxxx.com; ...

  10. oracle 函数、聚焦函数

    oracle 常用的函数 以及 聚焦函数 --1,字符函数 --当没有表可以用个的时候oracle自带一个虚表dual -- || 表示连接符号 将字符串连接到一起 式显示 Lower(char):将 ...