5.2 运算符重载
5.2.5 "++"和"--"的重载
1、使用成员函数以前缀方式和后缀方式重载运算符“--”
【示例】
#include<iostream>
using namespace std;
class Three{
public:
Three(int I1=0,int I2=0,int I3=0); //声明构造函数
void print();
Three operator--(); //声明自减运算符--重载成员函数(前缀方式)
Three operator--(int); //声明自减运算符--重载成员函数(前缀方式)
private:
int i1,i2,i3;
};
Three::Three(int I1,int I2,int I3){ //定义构造函数
i1=I1;
i2=I2;
i3=I3;
}
void Three::print(){
cout<<"i1:"<<i1<<" i2:"<<i2<<" i3:"<<i3<<endl;
}
Three Three::operator--(){ //定义自减运算符--重载成员函数(前缀方式)
--i1;
--i2;
--i3;
return *this; //返回自减后的当前对象
}
Three Three::operator--(int){ //定义自减运算符--重载成员函数(后缀方式)
Three temp(*this);
i1--;
i2--;
i3--;
return temp; //返回自减前的当前对象
}
int main()
{
Three obj1(4,5,6),obj2,obj3(11,12,13),obj4;
obj1.print();
--obj1;
obj1.print();
obj2=obj1--;
obj2.print();
obj1.print();
cout<<endl;
obj3.print();
obj3.operator--();
obj3.print();
obj4=obj3.operator--(0);
obj4.print();
obj3.print();
return 0;
}
【运算结果】

2、使用友元函数以前缀方式和后缀方式重载运算符“++”
【示例】
#include<iostream>
using namespace std;
class Three{
public:
Three(int I1=0,int I2=0,int I3=0); //声明构造函数
void print();
friend Three operator++(Three &op); //声明自加运算符++重载成员函数(前缀方式)
friend Three operator++(Three &op,int); //声明自加运算符++重载成员函数(后缀方式)
private:
int i1,i2,i3;
};
Three::Three(int I1,int I2,int I3){ //定义构造函数
i1=I1;
i2=I2;
i3=I3;
}
void Three::print(){
cout<<"i1:"<<i1<<" i2:"<<i2<<" i3:"<<i3<<endl;
}
Three operator++(Three &op){ //定义自加运算符++重载友元函数(前缀方式)
++op.i1;
++op.i2;
++op.i3;
return op;
}
Three operator++(Three &op,int){ //定义自加运算符++重载友元函数(后缀方式)
op.i1++; //返回自加前的当前对象
op.i2++;
op.i3++;
return op;
}
int main()
{
Three obj1(4,5,6),obj2(14,15,16);
obj1.print(); //显示obj1的原值
++obj1; //隐式调用Three operator++(Three&)
obj1.print(); //显示执行++obj1后的obj1的值
obj1++; //隐式调用Three operator++(Three&,int)
obj1.print(); //显示执行obj1++后的obj1的值
cout<<endl;
obj2.print(); //显示obj2的原值
operator++(obj2); //显示调用,意为++obj2
obj2.print(); //显示执行++obj2后的obj2的值
operator++(obj2,0); //显示调用,意为obj2++
obj2.print(); //显示执行obj2++后的obj2的值
return 0;
}
【示例结果】

本文深入探讨了C++中运算符“--”和“++”的重载方法,包括使用成员函数和友元函数以前缀和后缀方式进行重载的具体实现,通过实例展示了如何在自定义类中正确应用这些重载运算符。
5116

被折叠的 条评论
为什么被折叠?



