运算符重载(位操作运算符和逻辑运算符)

运算符重载

//位操作运算符
& | ~ ^ << >>
//逻辑运算符
! && ||
#include <iostream>
#include <stdio.h>
using namespace std;

class Interger{
public:
	Interger(const int i = 10):val(i){}
	Interger(const Interger &obj){
		val = obj.val;
	}
	~Interger(){}
public:
	int getval(){
		return val;
	}

	//位操作运算符
	friend bool operator&(const Interger &a, const Interger &b);
	friend bool operator|(const Interger &a, const Interger &b);
	friend Interger operator~(const Interger &obj);
	friend bool operator^(const Interger &a, const Interger &b);
	friend Interger operator<<(const Interger &obj, const int len);
	friend Interger operator>>(const Interger &obj, const int len);
	
	//逻辑运算符
	friend bool operator&&(const Interger &a, const Interger &b);
	friend bool operator||(const Interger &a, const Interger &b);
	friend bool operator!(const Interger &a);
	
	
private:
	int val;
	
};

Interger operator<<(const Interger &obj, const int len)
{
	Interger tmp(obj.val<<len);
	return tmp;
}

Interger operator>>(const Interger &obj, const int len)
{
	Interger tmp(obj.val>>len);
	return tmp;
}

bool operator&(const Interger &a, const Interger &b)
{
	if(a.val & b.val){
		return true;
	}
	else
		return false;
}

bool operator&&(const Interger &a, const Interger &b)
{
	if(a.val && b.val){
		return true;
	}
	else
		return false;
}

bool operator|(const Interger &a, const Interger &b)
{
	if(a.val | b.val){
		return true;
	}
	else
		return false;
}

bool operator||(const Interger &a, const Interger &b)
{
	if(a.val || b.val){
		return true;
	}
	else
		return false;
}

bool operator!(const Interger &a)
{
	if(a.val){
		return false;
	}
	else
		return true;
}

bool operator^(const Interger &a, const Interger &b)
{
	if(a.val == b.val)
		return false;
	else
		return true;
}

Interger operator~(const Interger &obj)
{
	Interger tmp(~obj.val);
	return tmp;
}
 
 
int main()
{
	Interger a(10);
	Interger b(5);
	cout << "a.val = " << a.getval() << endl;
	cout << "b.val = " << b.getval() << endl;
	
	printf("a&b = %x\n", a&b);
	printf("a&&b = %x\n", a&&b);
	printf("a|b = %x\n", a|b);
	printf("a||b = %x\n", a||b);
	printf("!b = %x\n", !b);
	printf("a^b = %x\n", a^b);
	
	Interger c = ~a;
	cout << "~a = " << c.getval() << endl;
	
	//Interger d = operator<<(a,2);
	Interger d = a<<2;
	cout << "a<<len = " << d.getval() << endl;
	
	Interger e = a>>2;
	cout << "a >> len = " << e.getval() << endl;
	
	return 0;
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值