运算符重载:(重载——函数同名,参数不同,行为相似)
运算符重载——特殊的一种重载 (加 operator)
友元运算符重载 与函数对比,功能相同
friend const int* getaddr(const Demo &);
friend Demo& addeq(Demo &, const Demo &);
函数实现功能不直观不容易被理解
friend const int* operator& (const Demo &);
friend Demo& operator += (Demo &, const Demo &);
运算符重载实现功能直观便于理解
friend Demo& operator ++ (Demo &); 前++
friend Demo& operator ++ (Demo &,int);后++
成员函数运算符重载 成员函数在类中 属于类 可以使用this 指针所以成员函数的运算符重载在传参数时 参数个数和友元运算符重载不同。
bool operator !=(Integer &)
bool是判断返回值(对或者错)
【】通过数组名[]访问数组成员,即得到一个对象
通过数组名[]访问数组成员,即得到一个对象,
对象有一个运算符[]得到对象管理的整型数组的一个整型
arr[0]:IntArray对象
arr[0][0]:是一个整型
注意事项 除关系运算符“.”、作用域运算符“::”、sizeof运算符和三目运算符“:?”外,C++中的所有运算符都可以重载(其中“=”和“&”不必用户重载)
重载运算符限制限制在C++语言中已经有的运算范围内的允许重载的运算符之中,不能创建新的运算符。
运算符重载的实质就是函数重载,遵循函数重载的选择原则
重载之后的运算符不能改变运算符的优先级和结合性,也不能改变运算符操作数的个数及语法结构
运算符重载不能改变该运算符用于内部类型的对象的含义
运算符重载是针对新类型数据的实际需要对原有运算符进行的适当的改造,重载的功能应当与原有功能相类似,避免没有目的地使用重载运算符
重载运算符的函数不能有默认参数,否则就改变了运算符的参数个数
重载的运算符只能是用户自定义类型,否则就不是重载而是改变了现有的C++标准数据类型的运算符的规则
运算符重载可以通过成员函数的形式,也可以通过友元函数的形式,和非成员的普通函数