C++之operator关键字作用(一百一三十)
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关键字作用(一百一三十)相关推荐
- C++ operator关键字(重载操作符)
C++ operator关键字(重载操作符) operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名. 这是C++扩展运算符功能的方 ...
- (123)FPGA面试题-介绍低速接口(UART、IIC、SPI),SPI有几根线,每根线的作用?(三)
1.1 FPGA面试题-介绍低速接口(UART.IIC.SPI),SPI有几根线,每根线的作用?(三) 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-介 ...
- static、const、volatile等关键字作用
目录 一.需要明白c语言中对象的一些属性 1.C语言中内存分配 2.变量的作用域 3.链接属性 4.存储期 二.static.const.volatile关键字作用 1.static关键字作用 2.c ...
- switch()语句中,default,break关键字作用,以及贯穿问题
switch()语句中,default,break关键字作用,以及贯穿问题 1.default代表switch()中没有此类情况 2没有break,语句会一直穿到底部
- C++中类成员和类继承的private、protected和public关键字作用
摘要 C++中类成员和类继承的private.protected和public关键字作用. 类成员中,private.protected和public 类成员变量或函数前加上关键字private.pr ...
- C++ 赋值重载运算符(overloaded operator)operator关键字
重载运算符 重载运算符的本质是函数,其名字由operator关键字后接表示要定义的运算符的符号组成. 因此,赋值运算符就是一个名为operator=的函数. 类似于任何其他的函数,重载运算符函数也有一 ...
- Java Review(三十六、IO)
文章目录 File 类 访问文件和目录 1.访问文件名相关的方法 2. 文件检测相关的方法 3. 获取常规文件信息 4. 文件操作相关的方法 5. 目录操作相关的方法 文件过滤器 IO流概览 流的分类 ...
- NeHe OpenGL第三十五课:播放AVI
NeHe OpenGL第三十五课:播放AVI 在OpenGL中播放AVI: 在OpenGL中如何播放AVI呢?利用Windows的API把每一帧作为纹理绑定到OpenGL中,虽然很慢,但它的效果不错. ...
- NeHe OpenGL第三十九课:物理模拟
NeHe OpenGL第三十九课:物理模拟 物理模拟简介: 还记得高中的物理吧,直线运动,自由落体运动,弹簧.在这一课里,我们将创造这一切. 物理模拟介绍 如果你很熟悉物理规律,并且想实现它,这篇 ...
最新文章
- arcgis合并tif影像_微图影像地图导出拼接大图的参数说明
- 二十一世纪贫穷人的2008条语录
- Strategy模式与Delegate委托
- Kubernetes 集群的零停机服务器更新 | 文末有料!
- softmax函数与交叉熵损失函数
- 【Leetcode819】最常见的单词
- 跟周报焦虑说拜拜!Excel打通FineBI,到底有多香
- PostgreSQL数据库密码
- PAT 1003 Emergency
- 虚拟机ip、主机ip、代理ip
- 从0-1的CTF比赛环境搭建过程
- 为什么要使用虚拟机?
- 香港服务器还能否备案?
- java字符串长度(java字符串长度压缩)
- 微分电路与积分电路分析
- MediBang Paint Pro 漫画及插画工作软件
- 聊一聊回收科技那些事儿
- 550 Recipient unknown
- JS 的cookie三部曲
- alibaba的COBAR真是强大.