C++类(运算符重载,赋值运算符重载,const成员和类的初始化)

1.运算符重载

C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其 返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。

函数名字为:关键字operator后面接需要重载的运算符符号

函数原型:返回值类型 operator操作符(参数列表)

注:(1)不能通过连接其他符号来创建新的操作符:比如operator@

(2)重载操作符必须有一个类类型参数

(3)用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不 能改变其含义

(4)作为类成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐 藏的this

(5)注意以上5个运算符不能重载。

释:​​​​​

2.赋值运算符重载

参数类型:const T&,传递引用可以提高传参效率

返回值类型:T&,返回引用可以提高返回的效率,有返回值目的是为了支持连续赋值

检测是否自己给自己赋值

返回*this :要复合连续赋值的含义

(2)赋值运算符只能重载成类的成员函数不能重载成全局函数

原因:赋值运算符如果不显式实现,编译器会生成一个默认的。此时用户再在类外自己实现 一个全局的赋值运算符重载,就和编译器在类中生成的默认赋值运算符重载冲突了,故赋值 运算符重载只能是类的成员函数。

(3)用户没有显式实现时,编译器会生成一个默认赋值运算符重载,以值的方式逐字节拷贝。注 意:内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符 重载完成赋值。

(4)既然编译器生成的默认赋值运算符重载函数已经可以完成字节序的值拷贝了,还需要自己实 现吗?

原因:对与编译的内置类型,编译器是可以通过默认的来进行值拷贝,但是涉及到了资源管理(即自定义类型中,含有创建空间等),我们就不能通过默认的进行操作。

总结:如果类中未涉及到资源管理,赋值运算符是否实现都可以;一旦涉及到资源管理则必 须要实现。

3.前置++和后置++的重载(--同样的道理)

4.const成员

(1)将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数 隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。

注意,在const修饰的函数时,一定要注意是不是存在引用和指针等,一旦存在就要注意权限的问题。

例如:

4.构造函数

(1)构造函数体赋值

在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。

初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟 一个放在括号中的初始值或表达式。

 

<1>哪个对象调用构造件数,初始化列表是它所有成员变量定义的位置

 <2>不管是否显示在初始化列表写,那么编译器每个变量都会初始化列表定义初始化

注意:1. 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)

           2. 类中包含以下成员,必须放在初始化列表位置进行初始化:(1) 引用成员变量 (2)const成员变量 (3)自定义类型成员(且该类没有默认构造函数时)

           3. 尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量, 一定会先使用初始化列表初始化。

           4. 成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后 次序无关

 原因:在声明时,_a2在前,_a1在后,但在初始化的时候,不关初始化的位置关系来进行初始化,只与定义时候的顺序有关,即:_a2先初始化,但_a1又是一个为初始化的值,编译器就是随机的分配一个值给_a2。

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山野村夫.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值