c++中的运算符重载operator1(翁恺c++公开课[30]学习笔记)


运算符重载规则:
- 只有已经存在的运算符才能被重载,不能自己制造一个c++中没有的运算符进行重载
- 重载可以在类或枚举类型内进行,也可以是全局函数,但int、float这种已有的类型内是不被允许的
- 不能二元运算符重载为一元(如+、-二元运算符重载完后必须还得是二元),运算符的优先级不能被改变
基本形式:T operatorX(...) 及基本应用
例子:
const Integer Integer::operator+(const Integer& that); //重载Integer类内的+运算 你可以把“operator+”看成一个函数名 const Integer operator+(const Integer& r, const Integer& l); //重载两个Integer相加的全局函数
class Integer //完成例子
{
public:
Integer(int n= ):i(n) { };
const Integer operator+(const Integer& n) const
{
return Integer(i + n.i);
}
...
private:
int i;
};
好,我们Integer类对“+”运算符进行了重载,那么我们就来用一下:
Integer x(),y(),z();
z=x+y; //正确
z=x+; //正确
z=+y; //错误
第一种是重载的常规用法,z=x+y ===> z=x.operator+(y);当编译器看到“+”时就会去左值“x”里找下有没有对“+”的重载操作,找到后就调用重载的函数将表达式变为“z=x.operator+(y)”
第二种,看到“+”后找左值,左值为x对象,其中对“+”进行了重载,然后右值为整数3,首先把整数3转换为Integer对象后再进行 z=x.operator+(Integer(3))
第三种,左值为3,显然不能将y这个对象转换为int,所以编译器报错
那么问题来了,我们想让第三种也可以重载,怎么做呢,看下边的代码:
class Integer
{
friend const Integer operator+ (
const Integer& lhs,
const Integer& rhs); //将全局函数声明为Integer类的友元,便于访问类内的成员函数
...
}
const Integer operator+(const Integer& lhs, const Integer& ths)
{
return Integer(lhs.i + rhs.i); //访问类内成员函数
} z=+y; //正确
目录
- c++(翁恺浙大公开课) 笔记0
- static在c\c++中的作用(翁恺c++公开课[28-29]学习笔记)
- c++对象初始化(翁恺c++公开课[10])
- c++构造函数的初始化列表(翁恺c++公开课[13])
- c++继承:公有、私有、保护
- c++子类父类关系(翁恺c++公开课[15-16]学习笔记)
- c++拷贝构造函数(翁恺c++公开课[26-27]学习笔记)
- c++多态性及多态的内部实现(翁恺c++公开课[23-24])
- c++中的运算符重载operator1(翁恺c++公开课[30]学习笔记)
- c++中的运算符重载operator2(翁恺c++公开课[31-33]学习笔记)
- c++模板(翁恺c++公开课[34-35]学习笔记)
- 最好不要在头文件中写函数定义
c++中的运算符重载operator1(翁恺c++公开课[30]学习笔记)的更多相关文章
- c++中的运算符重载operator2(翁恺c++公开课[31-33]学习笔记)
上一篇operator1中,大概说了下重载的基本用法,接下来对c++中常见的可重载运算符归一下类,说一下它们的返回值,讨论下较为复杂的运算符重载上的坑
- static在c\c++中的作用(翁恺c++公开课[28-29]学习笔记)
static相对来说是一个较复杂的修饰符,c++中的static在c的基础之上又包含了static在类中的应用(也就是说多了static的成员变量和static的成员函数):c\c++中静态变量.对象 ...
- c++拷贝构造函数(翁恺c++公开课[26-27]学习笔记)
这节课在p26.拷贝构造中讲的很清楚,建议大家耐心的去看下. 什么时候会发生拷贝构造: 对象之间的初始化赋值 使用对象作为变量进行函数传参(通常使用引用来传参从而减去不必要的拷贝构造,提高效率和代码健 ...
- c++子类父类关系(翁恺c++公开课[15-16]学习笔记)
关于类的继承有三种:public继承.private继承.protected继承 首先说明,关于类的成员变量.函数的权限有三种(public.private.protected) 我们通常会让所有的成 ...
- c++模板(翁恺c++公开课[34-35]学习笔记)
为什么要有模板(templates):当我们需要一个列表(list),列表中元素可能都为X类型也可能都为Y类型,怎么来实现呢? 定义基类?可以实现,很多情况下可能不够简明的表达设计思想 克隆代码(写一 ...
- c++中的Exceptions异常处理(翁恺c++公开课[36])
Exceptions用于处理Run-time Error: //文件读取的异常捕获伪代码 try{ open the file; determine its size; allocate that m ...
- c++多态性及多态的内部实现(翁恺c++公开课[23-24])
多态是在父类函数的前面加上 “virtual” 关键字,使子类与父类同名的函数产生一种联系: 多态会用到两个特性:向上造型.动态绑定 向上造型是指:拿一个子类对象当作父类来看待,比如下边代码中的子类E ...
- c++构造函数的初始化列表(翁恺c++公开课[13])
初始化列表形式: class Point { private: const float x,y; Point(float xa = 0.0, flato ya = 0.0):y(ya),x(xa) { ...
- c++对象初始化(翁恺c++公开课[10])
c++对象初始化 就是去调用构造函数来完成初始化操作: 构造函数有无参数的构造函数.有参数构造函数.默认构造函数(编译器给我们实现的)...(拷贝构造函数之后说) 注意:默认构造函数只有在我们自己没有 ...
随机推荐
- 每天进步一点点------基础实验_08_触发器 :D、T触发器各一
/********************************************************************************* * Company : * Eng ...
- PHPCMS站内搜索功能实现方法汇总,一文解决PHPCMS站内搜索问题
1,https://blog.csdn.net/hzw19920329/article/details/80110673 点评:phpcms搜索功能实现方法,作者基于PHPCMS做个门户网站实现站内搜 ...
- AC自动机讲解超详细
begin:2019/5/2 感谢大家支持! AC自动机详细讲解 AC自动机真是个好东西!之前学KMP被Next指针搞晕了,所以咕了许久都不敢开AC自动机,近期学完之后,发现AC自动机并不是很难,特别 ...
- opencv:opencv概述
opencv官方:www.opencv.org github:https://github.com/opencv OpenCV OpenCV是一个开放源代码的计算机视觉应用平台,由英特尔公司研发中心俄 ...
- html学习3-CSS补充
position fixed:把标签固定在页面的某处 例子:使用fixed制作“回到顶部”按钮 <!DOCTYPE html> <html lang="en"&g ...
- 用python计算一条射线到两个平面的交点
前两天,一个朋友找我(半个程序猿)用python帮他写数学模型,当时的我直接是懵逼的,当听到三维啥的时候,整个人就好了,最终在周末花了3个小时把逻辑理了一遍,给小伙伴一个满意的答复了,话不多说,我来整 ...
- CDH搭建大数据集群(5.10.0)
纠结了好久,还是花钱了3个4核8G的阿里云主机,且行且珍惜,想必手动搭建过Hadoop集群的完全分布式.HBase的完全分布式的你(当然包括我,哈哈),一定会抱怨如此多的配置,而此时CDH正是解决我们 ...
- 最长递增子序列-Hdu 1257
最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- [数据库] MariaDB安装及使用
一.安装MariaDB 1.使用官方源安装marisdb 如果使用阿里云的源,目前的版本号为5.5.64.如果想安装最新的10.x版本,则需要使用MariaDB的官方源. 1)配置官方源: 在/etc ...
- 【笔记5-购物车及地址模块】从0开始 独立完成企业级Java电商网站开发(服务端)
购物车模块 数据库表设计 购物车表 CREATE TABLE mmall_ cart ( 'id' int(11) NOT NULL AUTO_ INCREMENT, 'user_ id' int(1 ...