8.11 重载 ++ 与 --
优质
小牛编辑
140浏览
2023-12-01
所有四种自增和自减运算符(即前置和后置的自增及自减运算符)都可以被重载。本节介绍编译器如何识别前置和后置的自增及自减运算符。
要重载既能允许前置又能允许后置的自增运算符,每个重载的运算符函数必须有一个明确的特征以使编译器能确定要使用的++版本。重载前置++的方法与重载其他前置一元运算符一样。
例如,假设要给 Date 对象 d1 增加一天,当编译器遇到前置自增表达式:
++d1
编译器就会生成成员函数调用:
d1.operator++()
该函数的函数原型为:
Date &operator++();
如果前置自增运算符函数是一个非成员函数,则当编译器遇到表达式:
++d1
编译器就会生成函数调用:
operator++(d1)
该函数的函数原型在类 Date 中的声明形式为:
friend Date &0peratOr++(Date &);
由于编译器必须能区分重载的前置和后置自增运算符函数,所以重载后置自增运算符遇到了一点儿困难。C++中所采用的方法是,当编译器遇到后置自增表达式:
d1++
编译器就会生成成员函数调用:
d1.operator++(0)
该函数的函数原型为:
Date operator++(int)
严格说来,0是一个伪值,它使运算符函数operator++在用于后置自增操作和前置自增操作时的参数表有所区别。
如果后置自增运算符函数是一个非成员函数,则当编译器遇到表达式:
d1++
编译器就生成函数调用:
operator++(d1, 0)
该函数的函数原型为:
friend Date operator++(Date &,int);
再重复一遍,编辑器使用参数。区别后置自增操作和前置自增操作所用到的 operator++ 函数的参数表。
本节所讲述的重载前置和后置自增运算符的内容同样可以用来重载前置和后置自减运算符,下一节探讨了使用重载的前置和后置自增运算符的Date类。