运算符重载

定义

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

运算符重载规则

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

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

{

函数体

}

运算符重载为成员函数

//重载 + , -

#include<iostream>

using namespace std;

class Point
{
private:
int x, y;
public:
Point()
{
x = 0;
y = 0;
}
Point(int a, int b) : x(a), y(b) {}
Point operator+(Point& p)
{
return Point(x + p.x, y + p.y);
}
Point operator-(Point& p)
{
return Point(x - p.x, y - p.y);
}
void display() { cout << x << " " << y << endl; }
};
int main()
{
Point a(3, 4);
Point b(4, 5);
Point c ;
c = a + b;
Point d = b - a;
c.display();
d.display();
}

结果:

//重载++, --

#include<iostream>

using namespace std;

class Point
{
private:
int x, y;
public:
Point()
{
x = 0;
y = 0;
}
Point(int a, int b) : x(a), y(b) {}
Point operator++()
{
this->x++;
this->y++;
return *this;
}
Point operator++(int)
{
Point old = *this;
++(*this);
return old;
}
Point operator--()
{
this->x--;
this->y--;
return *this;
}
Point operator--(int)
{
Point old = *this;
--(*this);
return old;
}
void display() { cout << x << " " << y << endl; }
};
int main()
{
Point a(3, 4);
a.display();
(a++).display();
a.display();
(++a).display();
cout << "--------" << endl;
a.display();
(a--).display();
a.display();
(--a).display();
return 0;
}

结果:

运算符重载为非成员函数

//对+, - 进行非成员函数重载

#include<iostream>

using namespace std;

class Point
{
private:
int x, y;
public:
Point()
{
x = 0;
y = 0;
}
Point(int a, int b) : x(a), y(b) {}
friend Point operator+(Point& a, Point& b)
{
return Point(a.x + b.x, a.y + b.y);
}
friend Point operator-(Point& a, Point& b)
{
return Point(a.x - b.x, a.y - b.y);
}
void display() { cout << x << " " << y << endl; }
};
int main()
{
Point a(3, 4);
Point b(4, 4);
Point c = a + b;
c.display();
}

结果:

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. 洛谷P2468 [SDOI2010]粟粟的书架

    来了来了,随便拽一道题写题解[大雾] 最近发现自己基础奇差于是开始复习之前学过的东西,正好主席树我几乎完全没学会,然后打开洛谷试炼场… 发现了这么一道二合一的题. 这道题其实分成两个部分,前50%是一 ...

  2. Nginx 编译设置模块执行顺序

    Nginx编译时,配置"--add-module=xxx"可以加入模块,当我们需要按照指定顺序来设置过滤模块执行顺序时,先配置的"--add-module=xxx&quo ...

  3. 发布Qt Widgets桌面应用程序的方法

    Qt是一款优秀的跨平台开发框架,它可以在桌面.移动平台以及嵌入式平台上运行.目前Qt 5介绍程序发布的文章帖子比较少.大家又非常想要知道如何发布Qt应用程序,于是我花了一点儿时间介绍一下如何发布Qt桌 ...

  4. js里面的this指向

    1.  this是动态绑定的,或者说是在代码运行期绑定而不是在书写期 function fire () { console.log(this.a) } var obj = { a: 1, fire: ...

  5. arcgis 点线面操作

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. JSP页面中验证码的调用方法

    步骤: 1.首先是要生成验证码 2.对验证码类进行调用:主要 实现的是  将验证码图片 输出到response.getOutputStream()这个输出流中 调用时,可以在页面调用,也可以在serv ...

  7. 订阅 如何在IntelliJ IDEA中使用.ignore插件忽略不必要提交的文件

    如何在IntelliJ IDEA中使用.ignore插件忽略不必要提交的文件 标签: idea git 插件 分类: Git 最近初学Git,而且在使用的IDE是IntelliJ IDEA,发现IDE ...

  8. Direct2D 第6篇 绘制多种风格的线条

    原文:Direct2D 第6篇 绘制多种风格的线条 上图是使用Direct2D绘制的线条,Direct2D在效率上比GDI/GDI+要快几倍,GDI/GDI+绘图是出了名的"慢", ...

  9. request与response的乱码问题的总结及解决方法

    一. response的乱码问题: 1,使用   字节流  向页面输出中文: 不一定会出现乱码,因为中文字节数组默认是GBK,如果浏览器打开的默认编码也是GBK,就不会出现乱码,否则会乱码. 解决办法 ...

  10. day16 web前端之JavaScript

    页面布局补充 样例页面: 示例代码: <!DOCTYPE html> <html lang="en"> <head> <meta char ...