C++运算符的重载

本文详细介绍了C++中的运算符重载概念,包括如何使用关键字operator来定义加法等运算符在类之间的操作,以及如何利用友元函数重载输入输出操作符,使自定义类能与C++标准流类配合工作。

前言

运算符重载是编译器提供给用户自定义的一种更方便的工作方式

定义

其实就是重新定义一些运算符的意思的,比如是让加法可以在类之间进行,当然我们要使用到关键字operator,话不多说,直接上代码

class Stu
{
public: 
	friend Stu operator+ (Stu &a,Stu &b);
	Stu (int a=0,int b=0)
	{
		this ->a =a;
		this ->b =b;
	}
	void prt()
	{
		cout<<"a="<<a<<" b="<<b<<endl;
	}


public:
	int a;
	int b;


};
Stu operator+ (Stu &a,Stu &b) //其实本质就是一个函数,通过重定
义的方式让他使用简单
{
	Stu c(a.a+b.a,a.b+b.b);
	return c;
}
Stu add (Stu &a,Stu &b) 
{
	Stu c(a.a+b.a,a.b+b.b);
	return c;
}


int main(int argc, char *argv[])
{
	Stu a(1,2),b(3,4);
	Stu c=add (a,b);//本质是一个函数,当然也可以这样调用
	Stu c =a+b;
//	Stu c=a.operator+ (b);
	c.prt();
	return 0;
}

类的属性为私用的时候

你如果阅读上面的代码你就会发现,在这里面,属性必须是公有的,不然外界不能访问,这时候我们就可以用到我们的友元函数了

class Stu
{
public: 
	friend Stu operator+ (Stu &a,Stu &b); //定义他为友元函数,就可以访问他私有额的数据了
	Stu (int a=0,int b=0)
	{
		this ->a =a;
		this ->b =b;
	}
	void prt()
	{
		cout<<"a="<<a<<" b="<<b<<endl;
	}
/*
Stu operator+ (Stu &b) //当然,你也可以写一个成员函数
{
	Stu c(this ->a+b.a,this ->b+b.b);
	return c;
}
*/

public:
private:
	int a;
	int b;


};
Stu operator+ (Stu &a,Stu &b)
{
	Stu c(a.a+b.a,a.b+b.b);
	return c;
}


int main(int argc, char *argv[])
{
	Stu a(1,2),b(3,4);

	Stu c =a+b;
//	Stu c=a.operator+ (b);
	c.prt();
	return 0;
}

友元函数 重载 << >>操作符

stream 和 ostream 是 C++ 的预定义流类

  1. cin 是 istream 的对象,cout 是 ostream 的对象
  2. 运算符 << 由ostream 重载为插入操作,用于输出基本类型数据
  3. 运算符 >> 由 istream 重载为提取操作,用于输入基本类型数据 用友员函数重载
  4. << 和 >> ,输出和输入用户自定义的数据类型
class Stu
{
public: 
	friend istream& operator>> (istream &p,Stu &b);//定义为友元可以访问私有成员
	friend ostream& operator<< (ostream &p,Stu &b);
	Stu (int a=0,int b=0)
	{
		this ->a =a;
		this ->b =b;
	}
	void prt()
	{
		cout<<"a="<<a<<" b="<<b<<endl;
	}

private:
	int a;
	int b;
};
ostream& operator<< (ostream &p,Stu &b) //cout的实现,返回值要使用ostream的实现链式操作
{
	p <<"nihao"<<b.a;
	return p;
}

istream& operator>> (istream &p,Stu &b) //和上面同理
{
	p >>b.a;
}


int main(int argc, char *argv[])
{
	Stu a(1,2),b(3,4);
	//	Stu c=add (a,b);
	//	cout<<a<<" wohenhao"<<endl;
	cin>>a;
	a.prt();
	//	Stu c=a.operator+ (b);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值