C++重载操作符详解
在C++中有很多的基本运算符,如+,-,*,/,==,>,<等等。这些基本的运算符对于基本的数据类型可以直接拿来使用。那么,涉及到我们自定义的数据类型,比如某些实际开发中的class的时候,如果想要实现这些基本的元素符操作,可能我们需要根据实际情况来进行操作符重载方可进行使用。
一:如下例子
判断连个对象是否相等,比如比较两个人是否同岁。
如下代码:
#include <iostream>
using namespace std;class person
{
public:int age;bool operator == (const person & ps) const;person(int a){this->age = a;}
};inline bool person::operator==(const person& ps) const
{if (this->age == ps.age){return true;}return false;
}int main()
{person pWWJ(10);person pwwj(1);if (pWWJ == pwwj){cout << "WWJ and wwj is equal" << endl;}else{cout << "they are not equal" << endl;}return 0;
}
上面的例子,我们无法直接比较pwwj和pWWJ这两个对象是否相等,但我们可以做到重载==运算符,然后在实现中比较这两个人对象的age是否相等即可。
上面的做法是将操作符重载为类成员函数。
二:再看如下例子:
#include<iostream>
using namespace std;
class person
{
public:int age;
public:person(int _age = 0):age(_age){cout << "person(int _age )" << endl;}person(person& ps){*this = ps;}
};
bool operator==(person& p1, person const& p2) //全局重载操作符==
{if (p1.age == p2.age){return true; //满足要求}return false;
}
int main()
{person rose;person jack;rose.age = 8;jack.age = 18;if (rose == jack){cout << " is equal " << endl;return 0;}cout << "not equal" << endl;return 0;
}
上面的例子,我们将重载==操作符函数定义在了全局区,没有定义在类中。也是一中方法。
那么问题来了,我们如何决定是将运算符重载为类中成员函数还是全名命名空间的函数呢?
①如果一个重载操作符是类成员,那么只有当与 它的左操数是该类的对象时,该操作符才会被调用。如果该操作符的左操作数必须是其他的类型,则操作符必须被重载为全局名字空间的成员。也就是说全局命名空间的操作符重载函数可以有多个参数,而属于类成员函数的重载操作符函数必须是单独参数的。
②C++要求赋值=,下标[],调用(), 和成员指向-> 操作符必须被定义为类成员操作符。任何把这些操作符定义为名字空间成员的定义都会被标记为编译时刻错误。
C++重载操作符详解相关推荐
- Nginx正则表达式之匹配操作符详解
2019独角兽企业重金招聘Python工程师标准>>> Nginx正则表达式之匹配操作符详解 nginx可以在配置文件中对某些内置变量进行判断,从而实现某些功能.例如:防止rewri ...
- 第五站:操作符详解-2
操作符详解-1:点此转入 目录 7.关系操作符 8.逻辑操作符 8.1 逻辑与和或的特点 8.1.1 逻辑与 8.1.2 逻辑或 9.条件操作符 10.逗号表达式 11.下标引用.函数调用和结构成员 ...
- 完结篇:操作符详解(2)
目录 一.单目操作符 1.! 逻辑反操作 补充:布尔类型 2.& 取地址操作符 3.* 间接访问操作符(解引用操作符) 4.sizeof 计算操作数的类型长度 5.~ 操作符 操作符的结合使 ...
- 菜鸟逆袭记之操作符详解
菜鸟逆袭记之操作符详解 1.算术操作符 2.移位操作符 (1)左移操作符 (2)右移操作符 3.位操作符 4.赋值操作符 5.单目操作符 (1)取地址(&) (2)sizeof与数组 (3)前 ...
- C语言基础之操作符详解
C语言基础之操作符详解 操作符的分类 算术操作符 移位操作符 位操作符 逻辑操作符 逗号表达式 表达式求值 隐式类型转换 算术转换 操作符的属性 xwg今天就带各位大佬来了解一波C语言的操作符. 操作 ...
- 【C语言】操作符详解(超详细)
hello~~,我是~小鹿,超级详细的操作符讲解来康康吧 可以收藏随时找到这里哦~ [C语言]操作符详解(超详细) 1.算数操作符:+,-,*,/,% 2.位移操作符:<< , >& ...
- C语言学习笔记—P13(操作符详解<1>+图解+题例)
目录 前言:●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教! --By 作者:新晓·故知 操作符详解<1>: 题例: 1. 操作符分类: 算术操作符 移位操作 ...
- c++ operator百样操作符重载(详解)
目录 一.operator== :等号判断重载 二.operator = : 等号赋值重载 三.operator != : 不等于重载 四.operator> : 大于号 或者 小于号 重载 五 ...
- java rx.observable_Rxjava2 Observable的条件操作符详解及实例
简要: 需求了解: 在使用 Rxjava 开发中,经常有一些各种条件的操作 ,如比较两个 Observable 谁先发射了数据.跳过指定条件的 Observable 等一系列的条件操作需求,那么很幸运 ...
最新文章
- pytorch 卷积网络入门实例
- JSP脚本 9大内置对象
- linux任务调度语法,linux crond任务调度-Go语言中文社区
- 《操作系统真象还原》-阅读笔记(下)
- Tomcat爆出高危漏洞
- git add/commit/pull之间的关系
- 主键与主键索引的关系
- ASP.NET导入Excel到数据库(SQL)
- spring 之 AOP 理解
- 佳能Canon MF4700 一体机驱动
- 3位1体学习法(smart哥)
- 深入了解“网上邻居”原理
- 中国移动 OneNET 物联网平台从入门到「放弃」
- 螃蟹WiFi驱动中的Band Steering功能
- ppt扇形图怎么显示数据_PPT里的扇形图/饼图怎么做才更有创意?
- 用matlab实现熵权法,熵权法原理及matlab代码实现
- c语言uint64_t转String,C语言编程 8字节的数据转换为uint64_t类型数据
- bim展示 java_一个用于在浏览器上展示bim模型的vue插件
- VB--. 和 ! ?
- 南宁动物园的动物,真是一个比一个疯!