【C++学习笔记】06_运算符重载

运算符重载,和函数重载一样,它允许我们在运算符的自然算法之外,自定义运算符的运算法则。如两个数组相加。
我们先来了解一下运算符重载的定义格式:
(以+为例)

返回类型 operator+(参数列表);

先举一个例子,运算符重载作为类成员函数的时候:
头文件:

class Array {
public:
	int array[5];
	Array operator+(Array a);
	};

Array Array::operator+(Array a)
{
	Array b;
	for (int i = 0; i < 5; i++)
	{
		b.array[i] = this->array[i] + a.array[i];
	}
	return b;
}

main函数:

int main(void)
{
	Array a,b,c;
	for (int i = 0; i < 5; i++)
	{
		a.array[i] = i;
		b.array[i] = i+5;
	}
	c = a + b;
	for (int i = 0; i < 5; i++)
	{
		cout << c.array[i] << "\t";
	}
	return 0;
}

输出:

5       7       9       11      13

其中主函数中的
c = a + b;
C++并没有定义两个类的加法,这是我们使用运算符重载实现的。
Array operator+(Array a);
当运算符重载作为成员函数时,我们只需要传一个参数,这是因为+号是一个双目运算符,除了this指针指向的类之外,再传一个参数就可以运算。

那么运算符重载作为非成员函数的时候呢?
我们把头文件改一下,main函数不变
头文件:

#pragma once
class Array {
public:
	int array[5];
	};

Array operator+(Array a,Array b)
{
	Array c;
	for (int i = 0; i < 5; i++)
	{
		c.array[i] = a.array[i] + b.array[i];
	}
	return c;
}

输出:

5       7       9       11      13

是不是所有的运算符都可以重载呢?
答案是否定的:
以下是可以重载的运算符:
双目算术运算符

+, - , *,/,%

关系运算符

==,!= ,< ,>,<=,>=

逻辑运算符

||,&&,!

单目运算符

+,-,*,&

自增自减运算符

++,- -

位运算符

| ,& ,~,^,<< ,>>

赋值运算符

=, +=, -=, *=, /= , % = , &=, |=, ^=, <<=, >>=

空间申请与释放

new, delete, new[ ] , delete[]

其他运算符

()(函数调用),->(成员访问),,(逗号),

以下是不可重载的运算符:

.:成员访问运算符

., ->:成员指针访问运算符

:::域运算符

sizeof:长度运算符

?::条件运算符

#: 预处理符号

编程起步,有不对的地方谢谢指正。😊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值