(一)运算符重载及实例
1.函数重载
指函数名相同,但特征标不同(参数列表不同),也称为函数多态。运算符重载将函数重载的概念应用于运算符上,使得c++运算符有多种含义。运算符重载中,c++根据操作数的数目和类型来决定采用何种操作。
2.运算符函数
要进行运算符重载,需要有一个被称为运算符函数的特殊函数形式。这种函数形式为:operator op(arguments);比如operator +();重载+运算符。这里注意一下,operator后面可以直接跟运算符,也可以有空格,没有影响(试验过)。
3.运算符重载剖析
实际上就是用operator +来取代原有的实现想要重载的功能的函数,这样,total=coding.operator+(fixing);就跟运算符的表示法total=coding+fixing;的作用是一模一样的。后一个式子实际就是调用coding的operator+函数,参数是fixing,即运算符左边是调用运算符函数的对象,右边是作为运算符函数的参数的对象。
4.运算符连续使用
如果返回是同一个类的对象,则我们的运算符可以连续使用,这是我们所希望的,比如t4=t1+t2+t3;将被转换为t4=t1.operator+(t2+t3);进一步t4=t1.operator+(t2.operator+(t3));注意前提是运算符返回的是同一个类的对象,而参数恰好也是对象。
5.重载限制
(1)重载后的运算符至少有一个是用户自定义的类型。即如果全部是基本类型的话,是不可以重载运算符的,必须是有一个类或者结构,这将防止用户为标准类型重载运算符。
(2)使用运算符不能违反运算符原来的运算规则,比如+有两个操作数,重载后也要有两个操作数。再比如运算符的优先级不改变。
(3)不能创建新的运算符。
(4)某些运算符不能重载,比如sizeof,.,::,等。C++不能重载的总共五个(还有其他关键字型的运算符,暂时不考虑): "."(类成员访问运算符);" .*"(类成员指针访问运算符); "::"(域运算符);"siezof"(长度运算符); " ?:"(条件运算符)
(5)有些运算符只能通过成员函数重载,不能通过友元重载。比如(),[],=,->。

网友评论