C++运算符重载

运算符

C++提供了许多标准的运算符,如=、-、*、/、%、&等,在C++中,运算符也是可以像函数那样进行重载的。
运算符的重载实际上是函数的重载,在C++中,每一个运算符对应着一个运算符函数,例如:

int x,y;
x+y;

表达式 x+y 在编译前,将被解释为函数调用形式:

operator+(x,y)

这里的 operator 是一个关键字,它与后面的 + 共同组成了该函数的函数名,所以运算符可以向函数那样进行重载。

运算符重载的一般格式

<返回类型> operator <运算符> (<参数表>){
	<函数体>
}

运算符重载的特点

相比起普通函数的重载,运算符的重载使用了关键字 operator 对重载函数进行标识和定义。但是重载运算符时应注意:

  • 只能重载已有的运算符
  • 重载以后运算符的优先级、结合性和语法结构均不改变

运算符重载的三种形式如下:

运算符分类常规表示operator表示形式参数个数
前缀+aoperator+(a,0)一元
中缀a+boperator+(a,b)二元
后缀a++operator++(a)一元

可重载的运算符

算术运算符:+,-,*,/,%,++,--;
位操作运算符:&,|,~,^(位异或),<<(左移),>>(右移)
逻辑运算符:!,&&,||;
比较运算符:<,>,>=,<=,==,!=;
赋值运算符:=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=;
其他运算符:[],(),->, ,(逗号运算符),new,delete,new[],delete[],->*

不可重载的运算符

(1)"."(类成员访问运算符) 
(2)" .*"(类成员指针访问运算符) 
(3) "::"(域运算符) 
(4)"sizeof"(长度运算符) 
(5) " ?:"(条件运算符)

示例

#include <iostream>

using namespace std;

class MyClass
{
public:
	MyClass();
	int data;
};

MyClass::MyClass()
{
	data = 0;
}

// 重载 + 
MyClass operator+(MyClass classA, MyClass classB) {
	MyClass classC;
	classC.data = classA.data + classB.data;
	return classC;
}
// cout 是 ostream 类的对象
// ostream 类和 cout 都是在头文件 <iostream> 中声明的
// ostream 类将<<重载为成员函数,而且重载了多次
// 为了使用cout,ostream 类需要将<<进行如下重载:
ostream& operator<<(ostream& os, const MyClass& c)
{
	os << c.data;
	return os;
}


int main() { 
	MyClass aClass, bClass, cClass;
	aClass.data = 10, bClass.data = 60;
	cClass = aClass + bClass;
	cout << cClass << endl;
	return 0; 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

偷窃月亮的贼

感谢投喂~

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

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

打赏作者

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

抵扣说明:

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

余额充值