运算符重载

定义

  1. - 运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同行为。

运算符重载规则

  1. - C++运算符除了少数几个,全都可以重载,且只能重载C++已有的运算符;
  2. - 重载后其优先级和结合性不会改变;
  3. - 重载的功能应当与原有功能类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型;

返回类型 operator 运算符(形参表)

{

函数体

}

运算符重载为成员函数

  1. //重载 + , -
  2. #include<iostream>
  3. using namespace std;
  4. class Point
  5. {
  6. private:
  7. int x, y;
  8. public:
  9. Point()
  10. {
  11. x = 0;
  12. y = 0;
  13. }
  14. Point(int a, int b) : x(a), y(b) {}
  15. Point operator+(Point& p)
  16. {
  17. return Point(x + p.x, y + p.y);
  18. }
  19. Point operator-(Point& p)
  20. {
  21. return Point(x - p.x, y - p.y);
  22. }
  23. void display() { cout << x << " " << y << endl; }
  24. };
  25. int main()
  26. {
  27. Point a(3, 4);
  28. Point b(4, 5);
  29. Point c ;
  30. c = a + b;
  31. Point d = b - a;
  32. c.display();
  33. d.display();
  34. }

结果:

  1. //重载++, --
  2. #include<iostream>
  3. using namespace std;
  4. class Point
  5. {
  6. private:
  7. int x, y;
  8. public:
  9. Point()
  10. {
  11. x = 0;
  12. y = 0;
  13. }
  14. Point(int a, int b) : x(a), y(b) {}
  15. Point operator++()
  16. {
  17. this->x++;
  18. this->y++;
  19. return *this;
  20. }
  21. Point operator++(int)
  22. {
  23. Point old = *this;
  24. ++(*this);
  25. return old;
  26. }
  27. Point operator--()
  28. {
  29. this->x--;
  30. this->y--;
  31. return *this;
  32. }
  33. Point operator--(int)
  34. {
  35. Point old = *this;
  36. --(*this);
  37. return old;
  38. }
  39. void display() { cout << x << " " << y << endl; }
  40. };
  41. int main()
  42. {
  43. Point a(3, 4);
  44. a.display();
  45. (a++).display();
  46. a.display();
  47. (++a).display();
  48. cout << "--------" << endl;
  49. a.display();
  50. (a--).display();
  51. a.display();
  52. (--a).display();
  53. return 0;
  54. }

结果:

运算符重载为非成员函数

  1. //对+, - 进行非成员函数重载
  2. #include<iostream>
  3. using namespace std;
  4. class Point
  5. {
  6. private:
  7. int x, y;
  8. public:
  9. Point()
  10. {
  11. x = 0;
  12. y = 0;
  13. }
  14. Point(int a, int b) : x(a), y(b) {}
  15. friend Point operator+(Point& a, Point& b)
  16. {
  17. return Point(a.x + b.x, a.y + b.y);
  18. }
  19. friend Point operator-(Point& a, Point& b)
  20. {
  21. return Point(a.x - b.x, a.y - b.y);
  22. }
  23. void display() { cout << x << " " << y << endl; }
  24. };
  25. int main()
  26. {
  27. Point a(3, 4);
  28. Point b(4, 4);
  29. Point c = a + b;
  30. c.display();
  31. }

结果:

C++第5次作业的更多相关文章

  1. python10作业思路及源码:类Fabric主机管理程序开发(仅供参考)

    类Fabric主机管理程序开发 一,作业要求 1, 运行程序列出主机组或者主机列表(已完成) 2,选择指定主机或主机组(已完成) 3,选择主机或主机组传送文件(上传/下载)(已完成) 4,充分使用多线 ...

  2. SQLServer2005创建定时作业任务

    SQLServer定时作业任务:即数据库自动按照定时执行的作业任务,具有周期性不需要人工干预的特点 创建步骤:(使用最高权限的账户登录--sa) 一.启动SQL Server代理(SQL Server ...

  3. 使用T-SQL找出执行时间过长的作业

        有些时候,有些作业遇到问题执行时间过长,因此我写了一个脚本可以根据历史记录,找出执行时间过长的作业,在监控中就可以及时发现这些作业并尽早解决,代码如下:   SELECT sj.name , ...

  4. T-SQL检查停止的复制作业代理,并启动

        有时候搭建的复制在作业比较多的时候,会因为某些情况导致代理停止或出错,如果分发代理时间停止稍微过长可能导致复制延期,从而需要从新初始化复制,带来问题.因此我写了一个脚本定期检查处于停止状态的分 ...

  5. Python09作业思路及源码:高级FTP服务器开发(仅供参考)

    高级FTP服务器开发 一,作业要求 高级FTP服务器开发 用户加密认证(完成) 多用户同时登陆(完成) 每个用户有不同家目录且只能访问自己的家目录(完成) 对用户进行磁盘配额,不同用户配额可不同(完成 ...

  6. 个人作业week3——代码复审

    1.     软件工程师的成长 感想 看了这么多博客,收获颇丰.一方面是对大牛们的计算机之路有了一定的了解,另一方面还是态度最重要,或者说用不用功最重要.这些博客里好些都是九几年或者零几年就开始学习编 ...

  7. 个人作业-week2:关于微软必应词典的案例分析

    第一部分 调研,评测 评测基于微软必应词典Android5.2.2客户端,手机型号为MI NOTE LTE,Android版本为6.0.1. 软件bug:关于这方面,其实有一些疑问.因为相对于市面上其 ...

  8. 软件工程第二次作业——git的使用

    1. 参照 http://www.cnblogs.com/xinz/p/3803109.html 的第一题,每人建立一个GitHub账号,组长建立一个Project,将本组成员纳入此Porject中的 ...

  9. hadoop作业调度策略

    一个Mapreduce作业是通过JobClient向master的JobTasker提交的(JobTasker一直在等待JobClient通过RPC协议提交作业),JobTasker接到JobClie ...

  10. SQL SERVER 2008复制数据库时发生执行SQL Server代理作业错误

    1. 情况说明 在利用SQL SERVER数据库复制向导,能够很方便的将一个数据库从一台服务器复制到另一台服务器上,具体操作步骤也十分简单. 不过在实际操作过程常发生“执行SQL SERVER代理作业 ...

随机推荐

  1. 洛谷 USACO P2207 Photo

    P2207 Photo 题目描述 Framer Jhon 打算给他的N头奶牛照相,( 2 <= N <= 1 000 000 000) . 他们排成一条线,并且依次取1~N作为编号. 每一 ...

  2. Leetcode50. Pow(x, n)(快速幂)

    实现 pow(x, n) ,即计算 x 的 n 次幂函数. 示例 1: 输入: 2.00000, 10 输出: 1024.00000 示例 2: 输入: 2.10000, 3 输出: 9.26100 ...

  3. golang之结构体

    Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. Go语言通过用自定义的方式形成新的类型,结构体是类型中带有成员的复合类型. Go 语言中的类型可以被实例化,使用new或&a ...

  4. 拦截导弹 (最长上升子序列LIS)

    #include <iostream> #include <stdio.h> #include <algorithm> using namespace std; ] ...

  5. 设置程序PrivatePath,配置引用程序集的路径(分离exe和dll)

    原文:设置程序PrivatePath,配置引用程序集的路径(分离exe和dll) 有时候我们想让程序的exe文件和dll文件分开在不同目录,这时候可以有3种方法 1.在app.config中配置 &l ...

  6. 前端与编译原理——用JS写一个JS解释器

    说起编译原理,印象往往只停留在本科时那些枯燥的课程和晦涩的概念.作为前端开发者,编译原理似乎离我们很远,对它的理解很可能仅仅局限于"抽象语法树(AST)".但这仅仅是个开头而已.编 ...

  7. 【机器学习PAI实战】—— 玩转人工智能之综述

    摘要: 基于人工智能火热的大背景下,通过阿里云的机器学习平台PAI在真实场景中的应用,详细阐述相关算法及使用方法,力求能够让读者读后能够马上动手利用PAI搭建属于自己的机器学习实用方案,真正利用PAI ...

  8. 【JZOJ4804】【NOIP2016提高A组模拟9.28】成绩调研

    题目描述 输入 输出 样例输入 5 3 1 2 3 1 2 1 2 1 1 1 1 样例输出 4 数据范围 解法 考虑设置左指针l和右指针r: 维护[l,r]的关于等第的桶. 初始l=r=0: 每次右 ...

  9. 连接池c3p0

    连接池c3p0 C3P0:hibernate和spring使用,有自动回收空闲连接的功能. 使用步骤: 1.导入jar包(c3p0-0.9.1.2.jar) 2.使用api a.硬编码(不推荐) ne ...

  10. 阿里云容器Kubernetes监控(九) - Kubernetes事件离线工具kube-eventer正式开源

    前言 监控是保障系统稳定性的重要组成部分,在Kubernetes开源生态中,资源类的监控工具与组件百花齐放.除了社区自己孵化的metrics-server,还有从CNCF毕业的Prometheus等等 ...