【C++】操作符重载

注意:操作符重载可以当做==“自定义类的运算”==

1 为什么需要操作符重载?
对于基础的变量,int等,不需要重载就知道如何做,但是对于自定义类,就无法进行运算,比如复数类。

2 操作符重载总结
1)操作符重载本质上是一个函数,可以采用 友元函数或者成员函数实现。但是采用这两种函数传递参数、实现代码、应用场合均不同。

全局函数与成员函数的比较:
传递参数:全局函数中不传递this指针,成员函数默认传递this指针,因此成员函数可以少一个参数;
属性访问:成员函数可以访问私有变量,全局函数需要转化为友元函数才可以。
应用场合:正常写法采用成员函数。必须采用全局函数重载的运算符有<<和>>,必须采用成员函数重载的运算符有=、()、[ ]、->四个。

2)操作符重载的格式:

#全局函数
int operator+(const A& a1, const A& a2)
#成员函数
int operator+(const A& obj)

函数名为operator与运算符的组合(可变);
输入为对象(可变,友元函数或成员函数实现);
返回值可以为元素、对象或者引用(可变)。

3)可以重载的运算符
在这里插入图片描述

3 实例:实现complex类的±运算符重载

注意:
1)使用友元函数重载需要注意的是,二元运算则传递两个参数,同时添加friend关键字,使用成员函数只需要一个参数。

#include <iostream>
using namespace std;

class Complex
{
   
public:
	Complex(int a, int b)
	{
   
		this->a = a;
		this->b = b;
	}
	friend Complex operator+(const Complex& x1, const Complex& x2);
	void printC()
	{
   
		cout << "a: " << this->a << "b:" << this->b << endl;
	}
	Complex operator-(const Complex& obj)
	{
   
		Complex tmp(this->a - obj.a, this->b - obj.b);
		return tmp;
	}
private:
	int a;
	int b;
};

//友元函数重载
Complex operator+(const Complex& x1, const Complex& x2)
{
   
	Complex tmp(x1.a + x2.a, x1.b + x2.b);
	return tmp;
}
void main()
{
   
	Complex x1(1, 2);
	Complex x2(3, 4);
	Complex x3 = x1 + x2;
	x3.printC();

	Complex x4 = x2 - x1;
	x4.printC();
	cout << "hello,world..." << endl;
	system("pause");
}

4 实例:基于3实现Complex类的前置–以及后置++

注意:
1)后置++需要在参数列表中增加占位符int,Complex operator++(Complex& obj, int)。
2)后置++先使用后++,如a++,在具体实现时就要先使用临时变量tmp暂存输入,而后++,最后返回临时变量。
3)使用成员函数实现比友元函数实现少一个参数,这个参数通过this指针传递。
4)传递的变量最好在引用&前使用const,保持变量的内存空间不能改变。

#include <iostream>
using namespace std;

class Complex
{
   
public:
	friend Complex operator+(const Complex& x1, const Complex& x2);
	friend Complex operator++(Complex& obj, int);
	Complex(int a, int b)
	{
   
		this
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值