基础备忘:特殊运算符重载
1.“++”和“--”重载
“++”和“--”运算符的重载要区分前置和后置两种形式。例如,表达式"++a"和"a++"是不一样的。
如果不区分前置和抹黑,则使用operator++()或operator--()即可,否则要使用operator++()或operator--()来重载前置运算符,operator++(int)和operator--(int)来重载后置运算符,调用时,参数int被传递值0。例如:
声明和定义后置的"++"或"--"等运算符重载,必须含有形式参数,在调用时一般为指定实参0。
2.赋值运算符"="重载
事实上,对于任何一个类,如果没有用户自定义的赋值运算符函数,系统会自动地为其生成一个默认的赋值运算符函数,以完成数据成员之间的复制。如:
X & X::operator = (const X &source)
{
//类对象成员之间的赋值语句
}
一旦类X的两个对象ob1和ob2已创建,就可用ob1=ob2进行赋值了。通常情况下,默认的赋值运算符函数就可以完成赋值任务,但在某些特殊情况下,例如,类中有一种指针类的形式,如果使用默认的运算符函数就会产生指针悬挂的错误。此时,就必须显式地定义一个赋值运算符重载函数,使参数赋值的两个对象有各自的存储空间,以解决这个问题。如:
在上述代码中,实现了下标运算符"[]"重载,其增加了甉数组下标是否越界的判断功能,下标越界返回"error",否则返回正常的数组元素值。在主函数mian中,分别用了两种方式调用下标运算符。此外,c++不允许把下标运算符函数作为外部函数来定义,只能是非静态的成员函数。