C++笔记 --运算符重载介绍 原创
运算符重载
1.重载
- 重载是指赋予新的含义
- c++允许在同一作用域内的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载
- **函数重载:**可以让一个函数名有多重功能,在不同情况下进行不同的操作
- **运算符重载:**赋予同一个运算符多重不同功能
- 在同一作用域内可以声明多个功能类似的同名函数,但是这些函数的形参(个数、类型、顺序)必须至少有一样不同,不能是返回值不同。
2.运算符重载
-
并不是所有运算符都可以被重载
-
可重载运算符
+ - * / % ^ & | ~ ! = < > += -= *= /= %= ^= &= |= << >> <<= + >>= == != <= >= && || ++ -- , -> () [] new new[] delete delete[]
-
不可重载的运算符
sizeof :? . .* ->* :: #
-
重载不能改变运算符的优先级和结合性
-
重载运算符不会改变用法
-
运算符重载函数不能有默认参数
-
运算符重载函数既可以作为类的成员函数,也可以作为全局函数
-
一般情况下,单目运算符最好重载为类的成员函数,双目运算符最好重载为友员函数**
-
类型转换函数只能定义为一个类的成员函数而不能定义为类的友员函数
-
若一个运算符的操作需要修改对象的状态,选择重载为成员函数比较好
-
若运算符所需操作数(尤其是第一个操作数)希望有隐式类型转换,则只能选择友员函数
-
当运算符函数是一个成员函数时,最左边的操作数(或者只有最左边的操作数)必须是运算符类的一个类对象(或者是类对象的引用),若左边的操作数必须是一个不同类的对象,或者是一个内部类型的对象,该运算符必须作为一个友员函数来实现
-
当需要重载运算符具有可交换性时,选择重载为友员函数