【C++程序设计基础】Chap7运算符重载笔记

文章详细阐述了C++中运算符重载的规则,包括可以重载的和不能重载的运算符,如点、域、三目运算符等。重点讨论了成员函数和友元函数在重载运算符中的应用,以及++和--运算符的前后置重载形式。还提到了赋值运算符只能作为成员函数重载,以及默认赋值操作和类型转换函数的注意事项。
摘要由CSDN通过智能技术生成
	不能重载的运算符:点、域、三目、内存

即. :: ?: sizeof
语法(若定义为成员函数):
返回类型 类名::operator op(参数表){……}
e.x. string Mclass::operater +(Mclass B){}
也可以用友元函数重载(尤其是对二元运算符可以满足交换性需求)
不能用友元函数重载的运算符:等括箭
即:=、()、[]、->
系统为类运算默认重载两个运算符:=(默认复制对象)、&(默认返回地址)
Attention:
可以重载负号
重载不能改变所需的操作数个数(如二元运算符只能操作两个数据)
来自C++标准文档的一些重载与编译规则:
在这里插入图片描述
在这里插入图片描述

重载运算符的编译器解释

一元:
成员函数:Obj.operator op()
友元函数:operator op(Obj)
二元:
成员函数:objL.operator op(objR)
友元函数:operator op(objL,objR)

++与–重载

原型与解释:

//A为类
//前置
//成员函数原型
A &A::operator++();
//成员函数解释
Aobj.operator++();
//友元函数原型
friend A&operator++(A&)
//友元函数解释
operator++(Aobj);
//后置
//成员函数原型
A &A::operator++(int)
//成员函数解释
Aobj.operator++(0)
//友元函数原型
friend A& operator++(A&,int)
//友元函数解释
operator++(A,0)

Attention:
不允许使用默认参数(如参数表中出现int x = 1)
不应使用伪参数,如:

Aobj++ 3;//非法
Aobj++(3);//合法

重载赋值运算符

Attention:只能重载为成员函数,且不能被继承
连续赋值会产生匿名对象复用的现象
若用户未重载赋值运算符,则在对象赋值时系统提供默认的赋值重载函数,
其原型为:constexpr A &A::operator=(const A &)
复制构造函数与重载赋值运算符函数都是对数据成员的复制,但执行时机不同,前者用于对象初始化,后者用于修改对象数据

重载()与[ ]

[ ]:
调用形式:对象[表达式]
():
调用形式:对象(表达式表)//表达式可为空
函数需作为左值时,需返回引用

重载流

在规范情况下被声明为友元,为保证istream>>obj的写法有效,但也可为声明成员函数,但不建议使用
格式:e.x.

//A为类名
istream& operator>>(istream&input,A &Aobj)
//返回流的地址有利于实现连续输入

类型转换函数

形式:classX::operator Type(){}
Attention:
1、必须为成员函数,不能为友元函数
2、无参数和返回类型,但函数体内必须返回Type类型值
3、编译时程序发现参数类型不匹配,可以实现自动类型转换(隐式转换)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值