c++学习5

一.运算符重载

对已有的运算符进行重新定义,赋予其另外的功能,以便其能适应不同的数据类型,使用operator关键字

  • 运算符运算对象的个数,其个数决定了重载函数的参数
  • 识别运算符左边的运算对象是类还是其他
    类的对象:使用全局函数实现,不是很推荐;使用成员函数实现,推荐使用,可以少一个参数
  • 其他:只能使用全局函数实现
//使用成员函数重载+
ob1 + ob2;
//上面可以看作是下面的形式
ob1.operator+(ob2);

1.重载<<

为了方便输出类的成员

using namespace std
class Person{
friend ostream& operator<<(ostream &out,Person &ob);
private:
	int num;
	string name;
	float score;
public:
	Person(){}
	Person(int num,string name,float score):num(num),name(name),score(score){}
};
//左边不是自定义类,所以使用全局函数进行重定义
//为了其能访问到类中的私有成员,还要将其作为类的友元
ostream& operator<<(ostream &out,Person &ob){//注意这里参数的引用可能会出现问题
	out<<ob.num<<" "<<ob.name<<" "<<ob.score;
	return out;//返回cout
}
int main(){
	Person lucy(100,"lucy",15.6f);
	Person bob(100,"bob",15.6f);
	//cout<<lucy;//cout无法正常的输出lucy中的所有信息
	cout<<lucy<<bob<<endl;//使用返回发cout进行链式反应
	return 0;
}

相对的重载>>运算符,就是为了方便给自定义类的对象赋值

istream& operator>>(istream &in,Person &ob){
	in>>ob.num>>ob.name>>ob.score;
	return in;
}
int main(){
	Person lucy;
	Person bob;
	cin>>lucy>>bob;
	return 0;
}

2.重载++

使用匿名参数进行区分前置++还是后置++

//后置++
Person operator++(int)
{
	Person old = *this;//保存原先的数据,用于返回
	num++;
	name = name + name;
	score++;
	return old;
}

//前置++
Person operator++()
{
	num++;
	name = name + name;
	score++;
	return *  this;
}

可以进行运行符重载

在这里插入图片描述

总结重载运算符是为了能完整的对自定义类进行一系列操作

搞钱的第五天,加油

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值