运算符重载函数作为类成员函数和友元函数

运算符重载函数既可以做为类成员函数也可以重载为友元函数,但使用定义方法和使用上是由较大差别的。

运算符重载函数作为类成员函数

首先看一个运算符重载函数作为类成员函数的示例代码:

定义Complex为复数类,重载运算符"+"实现复数的相加。

程序1.1

#include <iostream.h>
using namespace std;
class Complex
{
	public:
		Complex()
		{
			real=0;
			imag=0;
		}
		Complex(double r,double i)
		{
			real=r;
			imag=i;
		}
		Complex operator +(Complex &c2);//声明重载运算符"+"的函数
		void display();
	private:
		double real;
		double imag; 
};
Complex Complex::operator+(Complex &c2)//定义重载运算符"+"的函数
{
	Complex c3;
	c3.real=real+c2.real;
	c3.imag=imag+c2.imag;
	return c3;
} 
void Complex::display()
{
	cout<<"("<<real<<","<<imag<<"i)"<<endl;
}
int main()
{
	Complex c1(3,4),c2(5,-10),c3;
	c3=c1+c2;
	cout<<"c1=";
	c1.display();
	cout<<"c2=";
	c2.display();
	cout<<"c1+c2=";
	c3.display();
	return 0;
}


程序运行界面:


我们单独拿出运算符成员函数体来分析:

Complex Complex::operator+(Complex &c2)//定义重载运算符"+"的函数
{
	Complex c3;
	c3.real=real+c2.real;
	c3.imag=imag+c2.imag;
	return c3;
} 
这是重载"+"的成员函数,实现了两个类中的成员变量的值相加,并赋给第三个变量的功能。

但是,函数只有一个形参,那么另外一个进行加操作的类是谁呢?

实际上语句:c3=c1+c2;被解释为c3=c1.operator+(c2);

也就是说,c1类调用了它的成员函数operator+();c2作为该成员函数的实参。

当两个Complex类执行"+"运算时,“+”左面的类调用成员函数operator+(),并将c2作为函数的实参进行操作


运算符重载函数作为友元函数

我们也是先看一段程序代码:

程序的功能和程序1.1是一样的,不过我们在程序1.2中将运算符重载函数作为友元函数进行操作。

程序1.2

#include <iostream.h>
using namespace std;
class Complex
{
	public:
		Complex()
		{
			real=0;
			imag=0;
		}
		Complex(double r,double i)
		{
			real=r;
			imag=i;
		}
		friend Complex operator +(Complex &c1,Complex &c2);//声明重载运算符"+"的函数
		void display();
	private:
		double real;
		double imag; 
};
Complex operator+(Complex &c1,Complex &c2)//定义重载运算符"+"的函数
{
	Complex c3;
	c3.real=c1.real+c2.real;
	c3.imag=c1.imag+c2.imag;
	return c3;
} 
void Complex::display()
{
	cout<<"("<<real<<","<<imag<<"i)"<<endl;
}
int main()
{
	Complex c1(3,4),c2(5,-10),c3;
	c3=c1+c2;
	cout<<"c1=";
	c1.display();
	cout<<"c2=";
	c2.display();
	cout<<"c1+c2=";
	c3.display();
	return 0;
}

下面我们单独分析这个友元函数:

Complex operator+(Complex &c1,Complex &c2)//定义重载运算符"+"的函数
{
	Complex c3;
	c3.real=c1.real+c2.real;
	c3.imag=c1.imag+c2.imag;
	return c3;
} 
该函数是类Complex的友元函数,也就是说它不是Complex类的成员函数,Complex类对象不能调用该函数。

c3=c1+c2;被解释为c3=operator + (c1,c2);也是就说相加的两个类对象都作为operator +()的参数。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值