C++操作符重载

南笙酒味 提交于 2019-11-26 17:17:09

操作符重载的规则与方法

  • C++中的重载能够扩展操作符的功能
  • 操作符的重载以函数的方式进行
  • 本质:用特殊形式的函数扩展操作符的功能
  • 通过operator关键字可以定义特殊的函数
  • operator的本质是通过函数重载操作符
#include<stdio.h>

class Complex
{
	int a;
	int b;
public:
	Complex(int a = 0, int b = 0 )
	{
		this->a = a;
		this->b = b;
	}
	int getA()
	{
		return a;	
	}
	int getB()
	{
		return b;	
	}
	friend Complex operator + (const Complex& c1, const Complex& c2); //为了在重载函数中少写调用成员函数的步骤,所以这里使用了友元
};
//重载加号操作符,使得可以计算负数的加法
Complex operator + (const Complex& c1, const Complex& c2)
{
	Complex ret;
	ret.a = c1.a + c2.a;
	ret.b = c1.b + c2.b;

	return ret;
}

int main()
{
	Complex c1(1,2);
	Complex c2(3,4);
	Complex c3 = c1 + c2;

	printf("c = (%d, %d) \n", c3.getA(), c3.getB());
	return 0;
}

将操作符重载定义为类的成员函数

  • 比全局操作符重载函数少一个参数(左操作数)
  • 不需要依赖友元就可以完成操作符重载
  • 编译器优先在成员函数中寻找操作符重载函数
#include<stdio.h>

class Complex
{
	int a;
	int b;
public:
	Complex(int a = 0, int b = 0 )
	{
		this->a = a;
		this->b = b;
	}
	int getA()
	{
		return a;	
	}
	int getB()
	{
		return b;	
	}
	
	Complex operator + (const Complex& p) //成员函数版本的操作符重载函数,只需要一个参数就够了,该参数为右操作数。
	{
		Complex ret;
		printf("Complex operator + (const Complex& p)\n");
		ret.a = this->a + p.a;
		ret.b = this->b + p.b;
	
		return ret;
	}

	friend Complex operator  +  (const Complex& c1, const Complex& c2);
};

Complex operator + (const Complex& c1, const Complex& c2)
{
	Complex ret;
	printf("Complex operator + (const Complex& c1, const Complex& c2)\n");

	ret.a = c1.a + c2.a;
	ret.b = c1.b + c2.b;

	return ret;
}
int main()
{
	Complex c1(1,2);
	Complex c2(3,4);
	Complex c3 = c1 + c2;  // c1.operator + (c2)
	printf("c = (%d, %d) \n", c3.getA(), c3.getB());
	return 0;
}

实验结果:

Complex operator + (const Complex& p)
c = (4, 6)

总结:

  • 操作符重载时C++的强大特性之一
  • 操作符重载的本质是通过函数扩展操作符的功能
  • operator关键字是实现操作符重载的关键
  • 操作符重载遵循相同的函数重载规则
  • 全局函数和成员函数都可以实现对操作符的重载(优先考虑成员函数的操作符重载)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!