C++运算符重载(一)——必要性及重载原则
来源:互联网 发布:七了个三淘宝 编辑:程序博客网 时间:2024/06/06 00:15
原文:http://blog.csdn.net/qingyue_bao/article/details/6588839
一、必要性:
(一) C++中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类)
(二)C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载
(三) C++允许重载的运算符C++中绝大部分的运算符允许重载
不能重载的运算符只有5个:
(1) 成员访问运算符 .
(2) 作用域运算符 ∷
(3) 条件运算符 ? :
(4) 成员指针运算符 . *
(5) 编译预处理命令的开始符号 #
(四) 重载不能改变运算符运算对象(即操作数)的个数
(五) 重载不能改变运算符的优先级别
(六) 重载运算符的函数不能有默认的参数,否则就改变了运算符参数的个数,与前面第(3)点矛盾
(七) 重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。也就是说,参数不能全部是C++的标准类型,以防止用户修改用于标准类型数据的运算符的性质。
(八) 用于类对象的运算符一般必须重载,但有两个例外,运算符“=”和“&”不必用户重载。
① 赋值运算符(=)可以用于每一个类对象,可以利用它在同类对象之间相互赋值。
② 地址运算符&也不必重载,它能返回类对象在内存中的起始地址。
总之,当C++语言原有的一个运算符被重载之后,它原先所具有的语义并没有消失,只相当于针对一个特定的类定义了一个新的运算符。
二、运算符重载可以使用成员函数和友元函数两种形式
可以参考以下的经验:
(1)只能使用成员函数重载的运算符有:=、()、[]、->、new、delete。
(2)单目运算符最好重载为成员函数。
(3) 对于复合的赋值运算符如+=、-=、*=、/=、&=、!=、~=、%=、>>=、<<=建议重载为成员函数。
(4) 对于其它运算符,建议重载为友元函数。
运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。重载运算符的函数一般格式如下:
函数类型 operator 运算符名称 (形参表列)
{
对运算符的重载处理
}
重载为类成员函数时参数个数=原操作数个数-1(后置++、--除外)
重载为友元函数时 参数个数=原操作数个数,且至少应该有一个自定义类型的形参
- C++运算符重载(一)——必要性及重载原则
- C++运算符重载(一)——必要性及重载原则
- C++——运算符重载(一),入门篇
- C++(6)/运算符重载(一)
- 运算符重载(一)
- 运算符重载(一)
- 学习C++——运算符重载
- C++——运算符重载(二)
- C++——运算符重载
- 运算符重载(c++)
- C++重载运算符(一)如何重载运算符
- C++运算符重载(一)——加减
- C++高级编程(一)——运算符重载
- 多态性——运算符重载(一)
- 重载运算符一
- 运算符重载(一)
- 运算符重载(一)
- 运算符重载一
- 多个引用类型的变量“引用”同一个对象意味着什么
- 求该日为本年第几天(新的简便的)
- Unity3D的脚本-script入门
- MII
- css 中字体大小
- C++运算符重载(一)——必要性及重载原则
- js实现图片旋转
- Android保持屏幕长亮的解决方案
- 业务数据平台发展历程(两年经历分享)
- 增加难度的抽签问题(最内两层使用二分法)
- clientHttp
- Amazon Elastic Compute Cloud (Amazon EC2)
- 判断python 列表/字典深层key是否存在的方法
- 分布式缓存中多机房分布策略