关于C++运算符重载
2011-05-13 10:29
246 查看
操作符重载的方法是定义一个重载操作符的函数,在需要执行被重载操作符时,系统就自动调用该函数实现相应的操作。操作符重载实质上就是函数的重载。
操作符重载的规则:
C++不允许用户自定义新的操作符,只能对已有的C++操作符进行重载。
C++中绝大部分操作符允许重载,除了以下几种:
.(成员访问操作符)
.*(成员指针访问操作符)
::(域解析操作符)
?!(条件操作符)
sizeof(长度操作符)
重载不能改变操作符运算对象(即操作数)的个数。
重载不能改变操作符的优先级别。
重载不能改变操作符的结合性。
重载操作符的函数不能有默认参数。
重载的操作符必须和用户自定义类型对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。即参数不能全部是C++的标准类型。
用于类对象的操作符必须重载,但“=”和“&”除外。
操作符重载函数可以是类的成员函数,也可以是类的友元函数,还可以是既非类的成员函数也不是友元函数的普通函数。
重载为类的成员函数和友元函数可以访问类的私有成员。
当运算符左侧的操作数属于C++标准类型或是一个其他类的对象,则运算符重载不能作为成员函数,只能作为非成员函数。如:Matrix*Vec3可以重载为Matrix的成员函数,而Vec3*Matrix不能重载为Matrix的成员函数,只能重载为Matrix的友元函数或普通函数。
有的运算符(如赋值运算符、下标运算符、函数调用运算符)必须定义为类的成员函数,而有的运算符则不能定义为类的成员函数(如输入“<<”和输出运算符“>>”)。
操作符重载的规则:
C++不允许用户自定义新的操作符,只能对已有的C++操作符进行重载。
C++中绝大部分操作符允许重载,除了以下几种:
.(成员访问操作符)
.*(成员指针访问操作符)
::(域解析操作符)
?!(条件操作符)
sizeof(长度操作符)
重载不能改变操作符运算对象(即操作数)的个数。
重载不能改变操作符的优先级别。
重载不能改变操作符的结合性。
重载操作符的函数不能有默认参数。
重载的操作符必须和用户自定义类型对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。即参数不能全部是C++的标准类型。
用于类对象的操作符必须重载,但“=”和“&”除外。
操作符重载函数可以是类的成员函数,也可以是类的友元函数,还可以是既非类的成员函数也不是友元函数的普通函数。
重载为类的成员函数和友元函数可以访问类的私有成员。
当运算符左侧的操作数属于C++标准类型或是一个其他类的对象,则运算符重载不能作为成员函数,只能作为非成员函数。如:Matrix*Vec3可以重载为Matrix的成员函数,而Vec3*Matrix不能重载为Matrix的成员函数,只能重载为Matrix的友元函数或普通函数。
有的运算符(如赋值运算符、下标运算符、函数调用运算符)必须定义为类的成员函数,而有的运算符则不能定义为类的成员函数(如输入“<<”和输出运算符“>>”)。
相关文章推荐
- 关于c++运算符重载
- javascript里面的确一些关于Width,Height,Top,Left的问题
- 关于工时
- 关于Donews的记忆---昨天便是开始
- 关于需要互斥的地方的一个好东西(智能锁)
- 关于桌面界面和插件设计思想
- 关于vs2005和SQL Server安装顺序导致SQL Server Management Studio丢失的问题
- 关于MTU的一些概念与设置技巧
- 关于字符串与字符数组的一些小问题
- 关于linux图形界面的基本概念
- 关于mysql数据库中索引
- 关于北京风云Silverlight开发团队
- 关于DNS反解的一些资料
- 关于RTEMS MINI2440的QEMU仿真从UBOOT加载问题的研究
- 关于ActionScript3中的fl.transitions.Tween类应用时的注意事项
- 关于navicat连接oracle 报 ORA-12737 set CHS16GBK错误的解决方案
- 关于Tizen
- Cannot connenct to relay host 关于发送email报错的解决办法。
- 关于网关的精典描述通俗易懂
- 关于robotium