
运算符重载的基本格式
运算符重载的本质就是函数重载
类型说明符 operator 运算符 (参数列表)
{
函数体;//实现运算符功能的代码。
}
如果把 operator运算符”看作一个整体,把它看成函数名,上述定义不就是函数的定义吗?
其中, operator是关键字,函数的名字就是用 operator和其后的运算符共同组成的标识符共同组成的标识符。

运算符重载的基本规则
运算符重载时要遵循一定的规则,具体规则如下。
(1)只能重载C语言中已有的运算符,不能虚构新的运算符。
(2)运算符重载后不改变运算符的优先级顺序。例如,算术运算符“”和“”的优先级 高于“+”和“”,那么,在类中重载这些运算符后,“兴”和“”的优先级仍然高于“+”和 “”。只有括号能改变运算符的运算顺序。
(3)运算符重载后不改变运算符的结合性。例如,赋运算符“=”是右结合的,那么运 算符“=”被重载后仍然是右结合的。
(4)运算符重载后不改变操作数的个数。例如,关系运算符“>=”是双目运算符,那么 “>=”被重载后仍然是双目运算符;而“+”既可以是单目运算符,也可以是双目运算符,那 么“”既可以被重载为单目运算符,也可以被重载为双目运算符。
(5)运算符重载后不改变运算符原有的语义。例如,双目运算符“+”在算术运算中表示两数相加,那么“+”重载到类中仍然表示两个操作数的相加。如果改变了“+”的语义会 显得莫名其妙,极大地降低程序的可读性。
(6)运算符重载时操作对象至少应该有一个是自定义的类对象(或类对象的引用),即 不能为基本数据类型重载运算符。
(7)有五个常用运算符不允许被重载。并不是所有运算符都可以重载,以下五个运算 符不允许被重载:成员访问运算符“”、成员指针运算符“”、域运算符“:”、条件运算符 “?:”和 sizeof运算符。另外,强制类型转换运算符( static_cast、 const_cast、 dynamiccast和 reinterpret cast)、 alignof和 typeid也不能被重载。
4335

被折叠的 条评论
为什么被折叠?



