C++运算符重载

运算符重载

运算符重载是一种形式的C++多态。c++能够使用户定义多个名称相同但特征标(参数列表)不同的函数。这种被称为函数重载或者函数多态,旨在能用同名的函数来完成相同的操作。运算符重载也是如此。例如*号操作既可用于做指针地址,又可用于做两个数之间的乘法操作。C++会根据操作数的数目和类型来决定采用哪种操作。

 

重载运算符方式:operatorop(argument-list)

eg:operator+() 重载+号运算符,operator *()重载*号运算符。op必须为有效的运算符。

以下为重载+,*运算符实例:

 

#include<iostream>
using namespace std;

class User
{
private:
	int num;

public:
	User(int newNum);
	User operator+(User& u) const;
	User operator*(User& u) const;
	int getNum() const;
	void setNum(int newNum);
};

User::User(int newNum) {
	this->num = newNum;
}

User User::operator+(User& u)  const {
	User user = User(0);
	int Num = u.num + this->num;
	user.setNum(Num);
	return user;
}

User User::operator*(User& u) const {
	User user = User(0);
	int Num = u.num * this->num;
	user.setNum(Num);
	return user;
}

void User::setNum(int newNum) {
	this->num = newNum;
}

int User::getNum() const {
	return this->num;
}

int main() {
	User u1 = User(1);
	User u2 = User(2);
	User u3 = u1 + u2;
	User u4 = u1 + u2 + u3;

	User u5 = u4 * u3;
	
	cout << u3.getNum() << endl;   //output 3
	cout << u4.getNum() << endl;   //output 6
	cout << u5.getNum() << endl;   //output 18
	return 0;
}

 

重载限制

  1. 重载后的运算符必须至少有一个操作数是用户定义的类型,这将防止用户为标准类型重载运算符。
  2. 使用运算符时不能违反运算符原来的句法规则。例如不能讲求模运算符(%)重载成使用一个操作数,同样不能修改运算符的优先级。例如两个类相加的运算,加号和标准的加号运算优先级相同。
  3. 不能创造新的运算符,例如不能定义operator**()函数来表示求幂。
  4. 不能重载以下运算符:
  • sizeof(sizeof运算符)
  • .(成员运算符)
  • .*(成员指针运算符)
  • ::(作用域解析运算符)
  • ?:(条件运算符
  • typeid(一个RTTI运算符)
  • const_cast(强制类型转换运算符)
  • dynamic_cast(强制类型转换运算符)
  • reinterpret_cast(强制类型转换运算符)
  • static_cast(强制类型转换运算符)

     5. 下面运算符只能通过成员函数进行重载:

  • =(赋值运算符)
  • ()(函数调用运算符)
  • [](下标运算符)
  • ->:通过指针访问类成员的运算符

 

总结:可重载的运算符如下表:

+

-

*

/

%

^

&

|

~=

!

=

<

>

+=

-=

*=

/=

%=

^=

&=

|=

<<

>>

>>=

<<=

==

!=

<=

>=

&&

||

++

--

,

->*

->

()

[]

new

delete

new[]

delete[]

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值