1. 运算符重载(多态)
运算符函数格式: operator op(arguemnt-list)
例如: operator[](..)
对time 类重载运算符 + ,该运算将接受另一个time对象
返回time对象
time time::operator+(const time & T) const
{
time sum;
...
return sum;
}
那么对于time对象 A,B
就可以直接执行 time C = A + B 这样的运算,但是注意对应于列表的顺序!
同符多义的基本运算符可以多义重载(每种重载都对应于此前的句法) 比如 - 运算具有两种解释
2. 运算符重载限制:
a. 重载运算符必须有一个操作数是用户定义的类型
b. 使用运算符时不能违反运算符原本的句法规则(单、双目运算符),
也不能改变优先级
c. 不能创建新的运算符
d. 不能重载:
sizeof 、.*(成员指针运算符)、::、?:、typeid(RTTI运算符)
const_cast 、dynamic_cast 、reinterpret_cast 、static_cast (强制转换运算符)
e. 只能通过成员函数重载: = 、 () 、 [] 、 ->
3. 友元
分为三种:
a. 友元函数
b. 友元类
c. 友元成员函数
友元函数:
解决了 不能重载运算符解决 (double) 2.5 * (time) B 这样顺序的问题
I、创建友元函数
首先需要在类声明中放入原型,并在原型声明前加上关键字 friend
例如:
friend Time operator*(double m,const Time & t);
II、编写函数的定义
注:类的友元函数是非成员函数,其访问权限与成员函数相同
常用的友元:重载运算符 <<
推荐方法 :
ostream & operator<<(ostream &os,const className & obj)
{
os<< ...;
return os;
}
4. 类的自动转换和强制转换类型(C++ P 笔记)