c++之运算符的重载

一、定义

    为什么要重载运算符?

    在c++里面的一些基本类型其运算“+-*/”等等,而你自己用class定义的类并不能进行这些基本的基本

    运算,这就是为何要重载运算符,非常重要。

    运算符重载的实质:

    运算符重载的实质就是函数重载或函数多态。运算符重载是一种形式的C++多态。目的在于让人能用同名

    的函数来完成不同的基本操作。运算符函数形式:operator p(argument -list)p为要重载的运算符符号。

二、使用

    先了解一下什么运算符可以重载,什么运算符不能重载:

    

      这些运算符是可以重载的。

      而   .        .*     ::     ?:  这些是不能重载的。

      接下来写一个简单的例子来分析一下具体的重载操作:

class Teacher
{
	public :
		int age;
		string name; 
};
Teacher operator + (Teacher T1,Teacher T2)//重载双目运算符的写法
{
	Teacher T;
	T.age = T1.age +T2.age ;
	T.name =T1.name+T2.name;
	return 	T;
};
int main()
{
	Teacher T,T1,T2;
	T1.age =23;
	T2.age =25;
	T1.name = "lu";
	T2.name ="cifer"; 
	T=T1+T2;
	printf("%d",T.age );
	cout<<T.name <<endl;
} 

    以上的例子是用了类外的函数重载的,接下来我们用成员函数来重载“+”,来看看区别。

class Teacher
{
public :
	int age;
	string name; 
public :
	Teacher operator + (Teacher T1)//注意此时只有一个参数存在因为this指针的存在
	{
	Teacher T;
	T.age = this->age+T1.age;
	T.name =this->name+T1.name;
	return 	T;
	}
};
int main()
{
	Teacher T,T1,T2;
	T1.age =23;
	T2.age =25;
	T1.name = "lu";
	T2.name ="cifer"; 
	T=T1+T2;
	printf("%d\n",T.age );
	cout<<T.name <<endl;
}

 接下来使用友元函数重载流操作符:

class Teacher
{
public :
	friend ostream& operator << (ostream& cout,Teacher& par);//你必须注意到流操作符重载时的写法
private:
 	int age=20;
	string name= "lucifer";
};
ostream& operator << (ostream& cout,Teacher& par)
{
	cout<<par.age<<"\n"<<par.name<<endl;
	return 	cout;
}
int main()
{
	Teacher T1;
	cout<<T1<<endl;
}

!欢迎各位指出不足之处

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值