前置运算符重载
前置运算符重载是指对运算符位于操作数前面的运算符进行重载,例如 ++x、--x 等。在前置运算符重载函数中,可以通过修改当前对象的值来实现运算符的功能,最后返回修改后的对象。前置运算符重载函数的原型如下:
ReturnType& operator++(); // 前置递增运算符重载
ReturnType& operator--(); // 前置递减运算符重载
其中前置递增和递减运算符重载的返回值类型都应该是当前对象的引用,以便支持链式调用。
例子:
class MyClass{
public:
int value;
MyClass(int value) : value(value) {}
MyClass& operator++() {
++value;
return *this;
}
};
int main(){
MyClass obj(1);
++obj;
std::cout << obj.value << std:endl; //输出2
return 0;
后置运算符重载
后置运算符重载是指对运算符位于操作数后面的运算符进行重载,例如 x++、x-- 等。在后置运算符重载函数中,不能修改当前对象的值,而是需要创建一个新的对象来保存运算结果。然后,将当前对象的值递增或递减,并返回保存运算结果的对象。后置运算符重载函数的原型如下:
ReturnType operator++(int); // 后置递增运算符重载
ReturnType operator--(int); // 后置递减运算符重载
其中,int 表示一个哑元参数,用于区分前置和后置运算符重载。后置递增和递减运算符重载的返回值类型都应该是一个新的对象,而不是当前对象的引用。
例子:
class MyClass {
public:
int value;
MyClass(int Value) : value(value) {}
MyClass operator++(int) {
MyClass temp(int);
++value;
return temp;
}
};
int main() {
MyClass obj(1);
MyClass result = obj++;
std::cout << obj.value << std::endl; //输出2
std::cout << result.value << std::endl; //输出1