C++运算符的重载

C++提供了一种方法,可以使程序设计者按照不同的类型设计出不同的运算符功能。目的就是告诉编译器,当这个类型的对象使用此运算符时,就需要调用运算符重载函数。其实,运算符的重载是一种特殊的函数重载。

运算符重载函数通常为类的成员函数,既然是类的成员函数,就含有this指针。

其定义方式为:

返回值类型    类名::   operator紧跟需要重载的运算符(形参表);

operator是一个关键字

实例:复数的运算:

先看代码:

class Complex
{
private:
	float Real;
	float Image;
public:
	Complex(float real=0.0f,float image=0.0f):Real(real),Image(image){}

	Complex(const Complex& cp):Real(cp.Real),Image(cp.Image){}

	~Complex(){}

	Complex& operator=(const Complex& cp)
	{
		if (this != &cp)
		{
			Real = cp.Real;
			Image = cp.Image;
		}
		return *this;
	}

	Complex operator+(const Complex& cp)
	{
		Complex tmp;
		tmp.Real = Real + cp.Real;
		tmp.Image = Image + cp.Image;
		return tmp;
	}

	Complex operator*(const Complex& cp)
	{
		Complex tmp;
		tmp.Real = Real*cp.Real-Image*cp.Image;
		tmp.Image = Real*cp.Image+Image*cp.Real;
		return tmp;
	}

	void Print()const
	{
		cout << Real << " + " << Image << "i " << endl;
	}
};

int main()
{
	Complex c1(2.3, 5.6);
	Complex c2(-2.1, 6.0);

	Complex c3;
	c3 = c1 + c2;
	cout << "c1+c2=   ";
	c3.Print();

	c3 = c1 * c2;
	cout << "c1*c2=   ";
	c3.Print();
	return 0;
}

运行结果:

当编译器执行到加法运算时,会自己调用+的赋值运算符重载函数。当程序执行到乘法运算时,会自己调用乘法运算符的重载函数。这里就不写减法以及除法等等其他运算了。 

赋值运算符的重载(=)如果没有写,编译器会提供一个按位拷贝的赋值运算符的重载函数。

当用类的成员函数实现运算符的重载时,运算符重载函数的参数(当为双目运算符时)为一个或(当为单目运算符时)没有。运算符的左操作数一定是对象,因为重载的运算符是该对象的成员函数,而右操作数是该函数的参数。


单目运算符“++”和“-”存在前置与后置问题前置“++"格式为:
返回类型 类名::operator++()......}
而后置“++”格式为:
返回类型 类名::operator++(intX......]
后置“++”中的参数int仅用作区分,并无实际意义,可以给一个变量名,也可以不给变量名.

C++中只有极少数的的运算符不允许重载,其中包括:

三目运算符(?:)

成员操作符(.   .*)

作用域解析符(::)

sizeof()运算符

注释符( //    /*    */  )

#   ##也是不能够进行重载的

运算符重载有以下限制:

不可臆造新的运算符
不能改变运算符原有的优先级、结合性和语法结构,不能改变运算符操作数的个数

运算符重载不宜使用过多
重载运算符含义必须清楚,不能有二义性

下面都是可以进行重载的运算符

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

g162512

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值