C++语法------类和对象(3)

一(1):构造函数的深入理解

对于构造函数的介绍,我们之前已经了解到了很多,但是对于在类中有自定义类型,但是其构造函数又不是默认构造,而是传参的构造,那么对于这种类,我们又该怎么对其进行初始化呢?

此时,我们就可以用另一种初始化方法:初始化列表

初始化列表的使用:以‘:’开始,以‘,’进行分割。

初始化列表的本质就是类成员定义的地方!!!

所有成员都可以在初始化列表中初始化,也可以在函数体中进行初始化,那么什么情况下只可以使用初始化列表呢?

(1)const修饰的变量(const修饰的变量必须在定义的时候进行初始化)

(2)引用(引用必须在定义的时候进行初始化)

(3)自定义类型中没有默认构造,本身需要传参初始化的类

 

特性:在我们不写的情况下,编译器也会自动调用初始化列表,自定义成员则会去自动调用其默认构造函数,内置类型若给了缺省值,直接调给初始化列表将其进行初始化,否则不做处理。

默认调用顺序(在我们没有显式写出初始化列表情况下):初始化列表->函数体

若自定义中没有默认构造,则直接报错

初始化列表的初始化顺序类成员的声明顺序就是在初始化列表中的初始化顺序,所以尽量把初始化列表中的顺序与声明顺序保持一致,以免出现下列错误。

(在用_a2的值去初始化_a1时,此时的_a2还没有被初始化,所以_a1打印出来就是一个随机值)

PS:在实际写代码时,可以用初始化列表的情况下尽量就用初始化列表

一(2)隐式类型转换

A aa2 = aa1;(拷贝构造)      A aa3 = 3;(隐式类型转换)

在第二个例子中,先创建了一个临时变量,用3对其进行初始化,然后再用这个临时变量对aa3进行拷贝构造。

对于拥有多个参数的,也可以进行隐式类型转换.    例:A aa1{1,2}

如果要防止出现隐式类型转换,可以使用关键字:explicit   进行制止

二:友元

基本概念:若如果一个函数是一个类的友元,它可以直接访问该类中的所有成员(通俗理解,类有了一个朋友,这个朋友可以到类的家里来玩,可以玩类家里的东西),但是类不可以去访问友元中的成员,因为类并不是该函数的友元。

友元函数声明:friend+函数声明(一般而言,写到类的最前面)

作用:解决调用类私有成员的问题

以重载流输出<<为例,使用友元输出日期类

三:static成员

static成员存储在静态区,而static修饰的成员变量与成员函数间也有区别。

静态成员变量特点:

(1)属于所有类,所有类的成员都可以去调用它

(2)在进行初始化时,要单独地在外部对其进行初始化,因为它是存储在静态区中的

(3)不可以给它缺省值,因为它并不在对象中

实践用途:可以利用它去统计构造的次数或者被析构的次数

静态成员函数:与静态成员变量拥有的特性不同,在静态成员函数中,只可以去访问静态成员变量

(在静态成员函数中并没有隐含的this指针,所以其只可以访问静态成员变量)

四:内部类

基本概念:在一个类中,又再次定义了一个类,进行套娃

PS:内部类是当前类天生的友元!!!

五:匿名对象

基本概念:没有名字的类,生命周期只在当前这一行。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值