【C++】5.2 运算符重载(二)——"++"和“--”的重载

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;
	
	
}

【示例结果】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值