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 关闭自动转换

posted @ 2019-01-24 15:10  Cyborg  阅读(119)  评论(0编辑  收藏  举报