The Usage of Class
1. Operator Overloading
1.1 Overloading
Function overloading: 具有同一个函数名但是不同参数列表的函数Operator overloading
operatorop(argument list)(e.g. operator+(),operator*(),opretor[]())重载了+运算符后,a+b等同于a.operator+(b), 并且可以用于连加a+b+c等同于a.operator+(b.operator(c))限制
参与运算的对象至少有一个是用户自定义的类不能破坏原有的运算符的语法规则不能更改运算符的优先级不能创造一个新的运算符只能用成员函数重载运算符
2. Friend
为什么需要友元:以数乘为例,当A = 2.75 * B时,double类并不能访问重载的乘法运算。
定义: 不是成员函数,不需要使用类的限定域;不使用friend关键词做限定常用的友元重载运算符: <<
第一种重载方式,无法解决连续输出cout << time << endl;第二种重载方式参数ostream必须是引用
void operator<<(ostream
&os
,const Time
&t
){
os
<< t
.hour
<< ":" << t
.minutes
;
}
ostream
&operator<<(ostream
&os
,const Time
&t
){
os
<< t
.hour
<< ":" << t
.minutes
;
return os
;
}
3. Type change
两个标准类型: 如果兼容自动转换float a = 11,不兼容则不可行int *p = 10 // 错误,但可以强制转换int *p = (int *) 10类和标准类型或其他类: 只有接受一个参数(或其他参数有默认值)的构造函数才可以进行隐式的转换Stonewt(int stn); Stonewt s; s = 10;, 关键词explicit关闭这种特性,但可以使用强制转换s = (Stonewt)10;s = Stonewt(10);反向转换(标准类型->类): 显示int x = int(s);int x = (int)s;; 隐示: 使用转换函数, 加explicit后强制显示转换函数: operator typeName()
类方法无返回类型,但是在实现时会返回值无参数