1.operator关键字作用

 operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。它可以重载很多运算符号,比如:=、==、>=、>等等。

2.为什么使用操作符重载?

  <1>.系统的所有有操作符,只支持基本数据类型和标准库中提供的class。

  <2>.用户自己定义的class,如果需要支持基本操作,如比较大小,判断是否相等,则需用户自己实现。

   如:判断两个人(对象Person)是否一样大,我们默认的规则是按照其年龄(age)来比较,所以,在设计person 这个class的时候,我们需要考虑操作符==.

  根据分析,比较的依据应该是age。那么为什么叫重载呢?这是因为,在编译器实现的时候,已经为我们提供了这个操作符的基本数据类型实现版本.

 但是现在他的操作数变成了用户定义的数据类型class,所以,需要用户自己来提供该参数版本的实现。

3.程序例子: 实现运算符重载的两种方式

  • 运算符重载实现为类的成员函数;
  • 运算符重载实现为非类的成员函数(即全局函数)。

<1>. 运算符重载实现为类的成员函数

#include <iostream>
using namespace std;class person{
private:int age;
public:person(int nAge){this->age = nAge;}bool operator==(const person& ps){if(this->age == ps.age)return true;return false;}
};int main(){person p1(10);person p2(10);if(p1 == p2)cout << "p1 is equal with p2." << endl;elsecout << "p1 is not equal with p2." << endl;return 0;
}

注意:

因为运算符重载函数“operator==”是 person 类的一个成员函数,所以对象 p1、p2 都可以调用该函数。

其中的 if (p1 == p2) 语句,相当于对象 p1 调用函数“operator==”,把对象 p2 作为一个参数传递给该函数,从而实现了两个对象的比较。

<2>. 运算符重载实现为非类的成员函数(即全局函数)

对于全局重载运算符,代表左操作数的参数必须被显式指定。

#include <iostream>using namespace std;class person{
public:int age;
};bool operator==(person const& p1 ,person const& p2){if (p1.age == p2.age)    return true;elsereturn false;
}int main(){person p1;person p2;p1.age = 18;p2.age = 18;if(p1 == p2)cout << "p1 is equal with p2." << endl;elsecout << "p1 is NOT equal with p2." << endl;return 0;
}

<3>. 运算符重载的方式选择

可以根据以下因素,确定把一个运算符重载为类的成员函数还是全局函数:

  • 如果一个重载运算符是类的成员函数,那么只有当与它一起使用的左操作数是该类的对象时,该运算符才会被调用;而如果该运算符的左操作数确定为其他的类型,则运算符必须被重载为全局函数;
  • C++ 要求'='、'[]'、'()'、'->'运算符必须被定义为类的成员函数,把这些运算符通过全局函数进行重载时会出现编译错误;
  • 如果有一个操作数是类类型(如 string 类),那么对于对称操作符(比如操作符“==”),最好通过全局函数的方式进行重载。

<4>. 运算符重载的限制

实现运算符重载时,需要注意以下几点:

  • 重载后运算符的操作数至少有一个是用户定义的类型;
  • 不能违反运算符原来的语法规则;
  • 不能创建新的运算符;
  • 有一些运算符是不能重载的,如“sizeof”;
  • =、()、[]、-> 操作符只能被类的成员函数重载。

C++之operator关键字作用(一百一三十)相关推荐

  1. C++ operator关键字(重载操作符)

    C++ operator关键字(重载操作符) operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名. 这是C++扩展运算符功能的方 ...

  2. (123)FPGA面试题-介绍低速接口(UART、IIC、SPI),SPI有几根线,每根线的作用?(三)

    1.1 FPGA面试题-介绍低速接口(UART.IIC.SPI),SPI有几根线,每根线的作用?(三) 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-介 ...

  3. static、const、volatile等关键字作用

    目录 一.需要明白c语言中对象的一些属性 1.C语言中内存分配 2.变量的作用域 3.链接属性 4.存储期 二.static.const.volatile关键字作用 1.static关键字作用 2.c ...

  4. switch()语句中,default,break关键字作用,以及贯穿问题

    switch()语句中,default,break关键字作用,以及贯穿问题 1.default代表switch()中没有此类情况 2没有break,语句会一直穿到底部

  5. C++中类成员和类继承的private、protected和public关键字作用

    摘要 C++中类成员和类继承的private.protected和public关键字作用. 类成员中,private.protected和public 类成员变量或函数前加上关键字private.pr ...

  6. C++ 赋值重载运算符(overloaded operator)operator关键字

    重载运算符 重载运算符的本质是函数,其名字由operator关键字后接表示要定义的运算符的符号组成. 因此,赋值运算符就是一个名为operator=的函数. 类似于任何其他的函数,重载运算符函数也有一 ...

  7. Java Review(三十六、IO)

    文章目录 File 类 访问文件和目录 1.访问文件名相关的方法 2. 文件检测相关的方法 3. 获取常规文件信息 4. 文件操作相关的方法 5. 目录操作相关的方法 文件过滤器 IO流概览 流的分类 ...

  8. NeHe OpenGL第三十五课:播放AVI

    NeHe OpenGL第三十五课:播放AVI 在OpenGL中播放AVI: 在OpenGL中如何播放AVI呢?利用Windows的API把每一帧作为纹理绑定到OpenGL中,虽然很慢,但它的效果不错. ...

  9. NeHe OpenGL第三十九课:物理模拟

    NeHe OpenGL第三十九课:物理模拟 物理模拟简介: 还记得高中的物理吧,直线运动,自由落体运动,弹簧.在这一课里,我们将创造这一切.   物理模拟介绍 如果你很熟悉物理规律,并且想实现它,这篇 ...

最新文章

  1. arcgis合并tif影像_微图影像地图导出拼接大图的参数说明
  2. 二十一世纪贫穷人的2008条语录
  3. Strategy模式与Delegate委托
  4. Kubernetes 集群的零停机服务器更新 | 文末有料!
  5. softmax函数与交叉熵损失函数
  6. 【Leetcode819】最常见的单词
  7. 跟周报焦虑说拜拜!Excel打通FineBI,到底有多香
  8. PostgreSQL数据库密码
  9. PAT 1003 Emergency
  10. 虚拟机ip、主机ip、代理ip
  11. 从0-1的CTF比赛环境搭建过程
  12. 为什么要使用虚拟机?
  13. 香港服务器还能否备案?
  14. java字符串长度(java字符串长度压缩)
  15. 微分电路与积分电路分析
  16. MediBang Paint Pro 漫画及插画工作软件
  17. 聊一聊回收科技那些事儿
  18. 550 Recipient unknown
  19. JS 的cookie三部曲
  20. alibaba的COBAR真是强大.

热门文章

  1. EasyClick更新图库
  2. B-SOiD 系统运行报错全记录
  3. CSS/HTML 5简洁带图标的input日期选择器
  4. 你觉得学 Python 还是 Java 更好找工作?
  5. FusionCharts参数简单说明
  6. Java中的函数(方法)
  7. Scope及其子类介绍
  8. 单点登录-CAS介绍
  9. 艾永亮:颠覆传统行业,打造超级产品,了解并响应用户需求是关键
  10. JavaScript 实现表格隔行变色