重载运算符,拷贝赋值运算符

:重载运算符
  在C语言当中遇到有很多的运算符,如=>,<,+=等等。
  如果我们用==对两个对象进行判断是否相等,系统就不乐意了,它不知道怎么样去判断两个对象是否相等?
  比如,我定义了一个类,
  class A
  {
	public:
	int a;
	int b;
  }
  A obj1;
  A obj2;
  if(obj1 == obj2) //错误,系统判断不了
  {
  }
  原因分析:系统遇到两个对象之间的判断时,系统该怎么判断两个对象是否相等呢?在这里,比如说是当obj1.a等于obj2.a时就判断两个对象相等还是判断它们各自两个成员变量相等时,这两个对象才相等?如果系统有更复杂的成员,比如指针或者一个类,那么系统就懵逼了,系统不知道你要在什么样的条件下,才能判断两个对象是否相等。
  那就没有办法判断两个对象是否相等了吗?当然有办法。
  所以引出了重载运算符这个概念,它有例如+-===等的重载运算符。
    拿==来说,只要我们在这里规定某些规则就可以判断两个对象是否相等,例如它的两个成员之间的值相等时,我们可以判断两个对象相等之类的。
    在这里就是说,我们可以只判断obj1.a等于obj2.a时就判断obj1等于obj2,而不用去理其它成员变量是否相等。
    重载运算符可以理解为一个函数,在函数里我们写上与这个重载运算符有关的东西,
    一般用 operator+重载运算符构成函数名,例如time& operator=(const time& tmp){ }就构成了一个赋值运算符重载
    函数类型是time& ,operator=可以理解成函数名,还有后面的形参列表。

   二:拷贝赋值运算符
	对象之间的赋值 = 操作,这种运算符系统是默认提供的,像==运算符,系统就没有默认的提供了。
   time time1;
   time time2=time1;//这种调用的是拷贝构造函数
   如果是 time2=time1; 这种赋值方式,调用的是赋值重载函数。(前提是自己定义有)
如果自己定义有,那么有可能time1对象里有些成员变量的值和time2对象里有些成员变量的值不一样。

例如:
class A
{
public:
	int a;
	int b;
	int c;
public:
	//类里的赋值运算符声明
	A& operator=(const A& temp);//拷贝赋值运算符
};
//类外的赋值运算符定义
A& A::operator=(const A& temp)
{
	//里面的具体赋值操作由我们自己写
	a = temp.a;
	b = temp.b;
	c = temp.c;
}
后面,就可以执行类似于
A a;
A b;
b=a;//调用拷贝赋值运算符
的操作了。

当然,如果想禁止使用拷贝赋值运算符,可以用private修饰。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值