类和对象-赋值运算符重载

一.运算符重载

特点:

1.当运算符被用于类型的对象时,c++允许使用运算符重载的星是指定新的含义。

2.运算符重载是具有特定名字的函数,类似operator和后面的定义的运算符共同构成。

和普通函数一样,它具有对应的返回类型和参数列表以及函数体。

3.重载运算符函数的参数个数和该运算符的运算对象一样多。一元运算符有一个参数,二元运算符有两个参数,二元运算符的左侧运算对象传给第一个参数,右侧运算对象给第二个参数。

4.如果重载的运算符函数是成员函数,则它的第一个运算对象默认传给隐式的this指针,因为运算符重载是成员函数的时候,参数比运算对象少一个。

5.运算符重载以后,其优先级别和结合性和对应的内置类型运算符保持一致

不能创立新的操作符:operator@

几个特殊的运算符不能进行重载:.*  ::  sizeof  ::  .

6. 重载运算符++的时候,有分前置++和后置++。运算符重载函数都是operator++。为区分这两个++。c++规定是后置++增加一个int的形参,跟前置++构成函数重载,方便区分。

如:operator++(int)

7.重载<<和>>时,需要重载为全局函数,因为重载为成员函数,this指针默认强震了第一个形参位置,第一个形参位置是左侧运算对象,调用时就编程了对象<<cout,不符合使用习惯和可读性(以往iostream的时候是cout<<)

重载为全局函数把ostream/instream放到第一个形参位置就可以了,第二个形参位置当类类型对象。

二、赋值运算符重载

赋值运算符重载是一个默认成员函数,用于完成两个已经存在的对象直接的拷贝赋值,这里注意跟拷贝构造区分,拷贝构造用域一个对象拷贝初始化给另一个要创建的对象。

特点:

1.赋值运算符重载是一个运算符重载,规定必须重载为成员函数。赋值运算重载的参数建议写成const当前类类型引用,否则会传值传参会有拷贝。如:Date(const Date& d)

2.有返回值,且建议写成当前类类型引用,引用返回可以提高效率。

3.没有显式实现时,编译器会自动生成一个默认赋值运算符重载,默认赋值运算符重载行为跟默认构造函数类似,对内置类型成员变量会完成值拷⻉/浅拷⻉(一个byte一个byte的拷⻉),对自定义型
成员变量会调用他的拷⻉构造。
4. 像Date这样的类成员变量全是内置类型且没有指向什么资源,编译器自动生成的赋值运算符重载就可以完成需要的拷⻉,所以不需要我们显示实现赋值运算符重载。

像Stack这样的类,虽然也都是内置类型,但是_a指向了资源,编译器自动生成的赋值运算符重载完成的值拷⻉/浅拷⻉不符合我们的需求,所以需要我们自己实现深拷⻉(对指向的资源也进行拷⻉)。

像MyQueue这样的类型内部主要是自定义类型Stack成员,编译器自动生成的赋值运算符重载会调用Stack的赋值运算符重载,也不需要我们显示实现MyQueue的赋值运算符重载。这里还有一个小技巧,如果一个类显示实现了析构并释放资源,那么他就需要显示写赋值运算符重载,否则就不需要。
 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值