运算符重载
参数个数与操作个数应该一致(双目操作符就是2个参数,同时参数中包括this)
不能被重载的运算符
" .* "运算符的作用
.*就是用来调用成员函数指针的
调用
1.显式调用
运算符重载可以显式调用
eg.
2.转换调用
运算符重载增强了程序的可读性
bool operator==(......)//类型 operator运算符(参数)
{
}
解决成员私有问题
以上两种方法可以调用运算符重载
正常情况下成员变量默认私有,无法调用,有几种方法可以解决
重载为成员函数
一般情况下直接重载成成员函数来解决对象私有问题
拷贝构造
d1 = d4不是拷贝构造,拷贝构造首先要求构造一个新的对象
一般的拷贝构造函数:
成员函数返回值
函数正常返回值会自动生成一个该返回值的临时拷贝,并将该拷贝返回
为了减少消耗可以选择返回引用&来减少拷贝
eg.
错误用法
正确用法
这里的*this相当于d2,相较于直接返回d2可以减少拷贝
同时为了防止d1 = d1(自己给自己赋值),可以加入判断
赋值运算符重载
注意:赋值运算符重载不能写成全局函数(因为它是默认构造函数)
运算符重载与函数重载的关系
对于++a和a++的重载
为了区分重载,需要特殊处理,即强行给" 后置++ "增加一个int形参
流插入
对于双目操作符,运算符重载中参数顺序和操作数顺序是一致的,因此导致d1<<cout
但是第一个参数是隐藏的this,默认第一个位置
因此无法将自己写的cout与原本的使用习惯保持一致
结论
流插入operator<<想重载成成员函数,可以,但是使用不符合正常逻辑,不建议这样处理
建议重载为全局函数