【C++】类和对象(下)

  👑个人主页:啊Q闻       

🎇收录专栏:《C++》           

 🎉我自会去见我的山

💡感谢阅读,欢迎关注,点赞,收藏,评论💡

前言 

这篇博客主要是关于类和对象的知识,主要包括初始化列表,隐式类型转换,静态成员变量,友元类。类和对象还有一些内容在【C++】类和对象(上)-优快云博客    【C++】类和对象(中)-优快云博客

大家感兴趣也可以看看哦。

一. 初始化列表

1.初始化列表基本知识

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


1.初始化列表的本质可以理解为每个对象中成员定义的地方 

2.成员变量既可以在函数体内初始化,也可以在初始化列表中初始化,但是建议在初始化列表中初始化,因为对于自定义类型成员,不管我们写不写初始化列表,编译器都会先走初始化列表。

3.每个成员变量在初始化列表中只能出现一次【本质是初始化只能初始一次,在构造函数体内可以多次赋值】。

使用方式如图: 

成员变量既能在函数体内初始化,也能在初始化列表中初始化,那是不是代表二者作用完全相同呢?

其实并不是,当类中包含以下成员时,必须放在初始化列表中进行初始化:

1.引用成员变量(必须在定义时初始化)

2.const成员变量(必须在定义时初始化)

3.没有默认构造的自定义类型成员

三种情况如下: 

 2.初始化顺序

1.程序在执行时,无论初始化列表存在不存在,对于在自定义类型其都是先走初始化列表,再走函数体,所以我们在实践中,尽可能用初始化列表初始化,不方便再使用函数体初始化。

2.初始化列表的初始化顺序是按照声明的顺序进行。

 

二.隐式类型转换

构造函数不仅可以构造与初始化对象,对于接受单个参数的构造函数还具有类型转换的作用。

1.单参数构造函数 

编译器进行的优化:

当我们不希望隐式转换发生,我们就要用explicit修饰 

2.多参数构造函数 

三.静态成员变化

静态区变量,静态区函数不存在对象中,不走初始化列表。所以我们如何对静态区变量初始化呢?

静态区变量属于整个类,属于所有对象 

四.友元类

当我们在一个函数中想要使用另外一个函数的私有成员,我们就可以使用友元,友元是单向的,且友元不具有交换性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值