操作符重载的两种形式

操作符重载的两种形式:

1、重载为类成员函数

2、重载为友元函数

一、运算符形式

1、声明形式

函数类型 operator 运算符(形参)

{

。。。。。。。。

}

2、重载为类成员函数时

参数个数=原操作数个数-1(后置++、--除外)

3、重载为友元函数时 参数个数=原早作数个数,且至少应该有一个

自定义类型的形参。

4、双目运算符 B

1)如果要重载B的类成员函数,使之能够实现表达式 oprd1 B oprd2,其中oprd为A类的对象,

则B应该被重载为A类的成员函数,形参类型应该是oprd2所属的类型。

2)经重载后,表达式oprd1 B oprd2相当于oprd1.operator B(oprd2)

#include<iostream>
using namespace std;
class complexA
{
	int real;
	int image;
public:
	complexA(int ireal=0,int iimage=0)
	{
		real=ireal;
		image=iimage;
	}
	complexA operator +(complexA c2);
	complexA operator -(complexA c2);
	void display();
};
complexA complexA::operator+(complexA c2)
{
	complexA c;
	c.real=real+c2.real;
	c.image=image+c2.image;
	return 	complexA(c.real,c.image);//返回值加complexA 限定,或者写成return c。
}
complexA complexA::operator-(complexA c2)
{
	complexA c;
	c.real=real-c2.real;
	c.image=image-c2.image;
	return 	complexA(c.real,c.image);
}
void complexA::display()
{
	cout<<"("<<real<<","<<image<<")"<<endl;
}
int main()
{
	complexA c1(5,4),c2(2,10),c3;
	cout<<"c1=";c1.display();
	cout<<"c2=";c2.display();
	c3=c1-c2;
	c3.display();
	c3=c1+c2;
	c3.display();
	return 0;
	
}

5、前置单目运算符U

1)如果要重载U为类的成员函数,使之能够实现表达式 U oprd,其中oprd为A类的对象,

则U应重载为A类的成员函数,无形参。

2)经重载后,

表达式U oprd相当于oprd.operator U()。

6、后置单目运算符++和--

1)如果要重载++或者--为类的成员函数,使之能够

实现表达式opd++或者oprd--,其中oprd为A类的对

像,则++或--应被重载为A类的成员函数,且具有一个int

类型的形参。

2)经重载后,表达式 oprd++相当于

oprd.operator++(0).

#include<iostream>
using namespace std;
class clock
{
	int hour;
	int minute;
	int second;
public:
	clock(int h=0,int m=0,int s=0)
	{
		hour=h;
		minute=m;
		second=s;
	}
	void show()
	{
		cout<<hour<<":"<<minute<<":"<<second<<endl;
	}
	void operator++();//前置++运算符
	void operator++(int);//后置++运算符

};
void clock::operator++()
{
	second++;
	if(second>=60)
	{
		second=second-60;
		minute++;
		if(minute>=60)
		{
			minute=minute-60;
			hour++;
			hour=hour%24;
		}
	}
	cout<<"++clock: ";
}
void clock::operator++(int)
{
	second++;
	if(second>=60)
	{
		second=second-60;
		minute++;
		if(minute>=60)
		{
			minute=minute-60;
			hour++;
			hour=hour%24;
		}
	}
	cout<<"clock++: ";
	
}
int main()
{
	clock myclock(23,59,59);
	cout<<"first time output:";
	myclock.show();
	myclock++;
	myclock.show();
	++myclock;
	myclock.show();
	return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值