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;
}
【示例结果】