重载运算符

重载运算符

我们可以让类相加, 相减, 自加, 自减, 这些就需要对类的运算符进行重载.

我将重点依旧写在代码注释里, 方便一步步的看


#include <iostream>
#include <cstdlib>
#include <string>

class T1
{
public:
	T1(int m = 0) : i(m)
	{
		if (i < 0)
			i = -i;
	}
	operator int() const 
	{
		return i; 
	}
private:
	int c;
	int i;
};



//重载类型;
class T2
{
public:
	T2() = default;
	T2(int x1, std::string str1) : x(x1), str(str1) {}
	//重载 += 运算符;
	T2 operator+= (const T2 t2)
	{
		x += t2.x;
		str += t2.str;
		return *this;
	}

	//重载 + 运算符;
	T2 operator+ (const T2 &t2)
	{
		*this += t2;								//调用 += ;
		return *this;
	}

	//声明 - 运算符;
	T2 operator- (const T2 t2);	

	//相等 == , 定义 == 就应该定义 != ;
	bool operator== (const T2 &t2)
	{
		return t2.x == x && t2.str == str;
	}
	bool operator!= (const T2 &t2)
	{
		return !(*this == t2);
	}

	void Print() { std::cout << x << "  " << str << '\n'; }

private:
	int x;
	std::string str;
	//声明 + T2 与 int 类型的运算符, 采用友元关系;
	friend T2 operator+ (T2 &t2, const int m);
};

// + T2 与 int 类型的运算符;
T2 operator+ ( T2 &t2, const int m)
{
	t2.x += m;
	return t2;
}

// - 运算符;
T2 T2::operator- (const T2 t2)
{
	x -= t2.x;
	return *this;
}



class T3
{
public:
	T3() = default;
	T3(int X, int Y, std::string str1) : x(X), y(Y), str(str1) {}

	//重载 [];
	//在 int 后加上引用 & 这样返回的是变量, 而不是常数值, 去掉或加上 const, 返回的值不能被修改;
	int& operator[] (const int m)
	{
		if (m == 0)
			return x;
		else if (m == 1)
			return y;
	}

	//自增, 前自增和后自增;
	//使用一个参数 (int) 来区分 前自增 还是 后自增;
	//后自增和自减返回的形式是一个值而非引用;
	T3& operator++ ()						//前自增;
	{
		++x;
		++y;
		return *this;
	}
	T3 operator++ (int)					//后自增;
	{
		T3 t3 = *this;
		++*this;
		return t3;
	}
	T3& operator-- ()						//前自减;
	{
		--x;
		--y;
		return *this;
	}
	T3 operator-- (int)					//后自减;
	{
		T3 t3 = *this;
		--*this;
		return t3;
	}

	//重载();
	T3& operator() ()
	{
		x = -x;
		y = -y;
		return *this;
	}

private:
	int x;
	int y;
	std::string str;
};



int main()
{
	T1 t1(1);						//调用T1()默认构造函数;
	t1 = 4.3;						//调用T1()默认构造函数;
	t1 + 3;							//调用operator;
	std::cout << t1 << "\n";		//输出 4 ;


	T2 t2(1, "a"), t_2(2, "b");

	//调用 T2 + T2;
	std::cout << "调用 T2 + T2;		";
	t_2 = t_2 + t2;					//调用operator进行相加;
	//t_2.operator+=(t2);显示调用;
	t_2.Print();					//输出3, ba;

	//调用 T2 - T2;
	std::cout << "调用 T2 - T2;		";
	t_2 = t_2 - t2;					
	t_2.Print();					//输出 1, ba;

	//调用 T2 + int;
	//未定义 int + T2, 所以 4 + t2 是错误的;
	std::cout << "调用 T2 + int		";
	t2 = t2 + 4;
	t2.Print();						//输出5, a;

	//调用 == 与 !=
	std::cout << "调用 == 与 !=		";
	//t2.operator==(t_2);
	std::cout << (t2 == t_2) << "\n";


	T3 t3(1, 2, "abc");

	//角标;
	std::cout << "角标;   ";
	int i = t3[1];
	t3[0] = 4;
	//t3.operator[](0);
	std::cout << t3[0] << "  " << i << std::endl;

	//调用自增;
	std::cout << "调用自增;		";
	t3++;
	++t3;
	//t3.operator++(0);//显示调用
	//t3.operator++();
	std::cout << t3[0] << "  " << t3[1] << std::endl;


	system("pause");
	return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值