C++ primer plus chapter11
重载运算符 operatorop(argument-list)
如 operator +() 重载加号 不能虚构新符号 如 +
[]可以
如dis = sid+sara //两个SALES对象相加
dis = sid.operator+(sara) 编译器发现是他是SALES对象就替换
调用支持多个相加 如 t4=t3+t2+t1
t4=t1.operator(t2+t3)
t4 = t1.operator+(t2.operator+(t3))
限制
1不能为标准类型做重载 如-变成两个double 的和
2语法规则不变 比如%x 不行 谁余x
3不能创建新运算符 如** @
4部分运算符不能重载 如 sizeof .: .*等
友元函数 友元类 友元成员函数
重载乘法运算 用了两种不同类型 Time * double 左侧的操作数必须要是调用对象
A = B *2.75 不能A=2.75*B 但是可以A= operator*(2.75,B)// 非成员函数 (double m,,const Time & t) 非成员函数不能访问私有数据
友元函数登场
friend Time operator*(double m,const Time & t);
operator不是成员函数不能用成员运算符 但是他和成员运算符访问权限相同
定义时候不需要函数限定符Time::
Time operator*(double m,const Time & t) //friend not used in definition
然后正常定义
也可以
Time operator*(double m,const Time & t)
{
return t*m; //return的时候用重载
}
类声明原型用friend 就是在.h里
类内定义的函数被默认成内联函数
C++不自动转换不兼容的类型
一个参数的函数才能做转换函数
explicit 关闭自动转换