您的位置:首页 > 编程语言 > C语言/C++

C++ PP Chapter XI 使用类

2016-07-17 15:04 260 查看
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 笔记)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: