C++重载运算符

C++重载运算符

语法:返回值 operator运算符()
例子:

#include <iostream>

class Drug
{
	int Hp;
public:
	Drug(int hp):Hp(hp) {}
	int GetHp() const 
	{
		return Hp;
	}
};

class Role
{
	int Hp;
	int MaxHp;
public:
	Role(int hp,int maxHp):Hp(hp),MaxHp(maxHp) {}
	int GetHP() const
	{
		return Hp;
	}
	void operator+( Drug drug)
	{
		Hp += drug.GetHp();
		if (Hp > MaxHp)
		{
			Hp = MaxHp;
		}
	}
};

int main()
{
	Role Player{50,100};
	Drug addHp{20};
	Player + addHp;
	std::cout<< Player.GetHP(); 
}

在这里插入图片描述
在这里插入图片描述

**

关键字noexcept

**
从C++11开始,我们能看到很多代码当中都有关键字noexcept。比如下面就是std::initializer_list的默认构造函数,其中使用了noexcept。

  constexpr initializer_list() noexcept
  : _M_array(0), _M_len(0) { }

该关键字告诉编译器,函数中不会发生异常,这有利于编译器对程序做更多的优化。
如果在运行时,noexecpt函数向外抛出了异常(如果函数内部捕捉了异常并完成处理,这种情况不算抛出异常),程序会直接终止,调用std::terminate()函数,该函数内部会调用std::abort()终止程序。

**

C++的异常处理

**
C++中的异常处理是在运行时而不是编译时检测的。为了实现运行时检测,编译器创建额外的代码,然而这会妨碍程序优化。
在实践中,一般两种异常抛出方式是常用的:

一个操作或者函数可能会抛出一个异常;
一个操作或者函数不可能抛出任何异常。
后面这一种方式中在以往的C++版本中常用throw()表示,在C++ 11中已经被noexcept代替。

void swap(Type& x, Type& y) throw()   //C++11之前
{
    x.swap(y);
}
void swap(Type& x, Type& y) noexcept  //C++11
{
    x.swap(y);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值