11.1 运算符重载
运算符重载是一种形式的c++多态;用户能够定义多个名称相同但特征标(参数列表)不同的函数叫做函数重载或函数多态。
11.2 运算符重载示例
class Time
{
...
Time operator+(const Time&)const;//声明函数
}
Time Time::operator+(const Time& t)const//第一个Time是返回类型,第二个是对象名(命名空间)
{
Time sum;
sum.minutes = minutes + t.minutes;
sum.hours = hours + t.hours + sum.minutes/60;
sum.munutes %= 60;
return sum;
}
11.3 友元
该章节讲到了友元函数:通过让函数成为类的友元,可以赋予该函数与类的成员函数相同的访问权限。通常友元函数使用在运算符重载中。
friend Time operator*(double m, const Time & t);//声明
Time operator*(double m, const Time & t) //不是成员函数不要使用Time::限定符,不要在定义中使用friend
{
Time result;
...
return result;
}
11.4 重载运算符
…
11.5 example
11.6 类的自动转换和强制类型转换
11.6.1 c++内置类型转换
c++处理内置类型转换,相同类型的可以转换,虽然可能会损失精度,但不自动转换不兼容的类型。
int *p = 10;
无法自动转换时,使用强制转换:
int *p = (int *)10;
11.6.2 类的转换
将构造函数用作自动类型转换函数,程序将使用构造函数来创建一个临时对象,并用值初始化,随后复制到左值中。
使用 explicit关键字来修饰构造函数表示只能使用显示转换(直接初始化一个对象),不能进行隐式转换。