内部类与类创建的成员属性

前言

        内部类与内部类成员属性是两个不同的概念,如果对这两个名词表达的意思模棱两可,可能会对读代码造成影响,本文聚焦于这两者为大家区分清楚这两个不同的概念。

        内部类是,一般指将A类定义在B类的内部,也就是我们常说的嵌套类。类可以嵌套一层也可以嵌套多层,根据实际需求来选择是否嵌套。

        类创建的成员属性,指的是利用A类在B类的内部实例化对象,该对象作为B内部的成员属性,不属于嵌套类。


内部类

        内部类的特点:

1.内部类是定义在类域内的独立的类,内部类可以和全局域中的类同名,但调用时要指明作用域。

2.内部类默认是外部类的友元类。(友元是一个比较重要的语法,在类与对象下会讲到)

3.内部类本质是一种封装,内部类被定义在外部类域内,使用内部类时都需要指明类域。

179dad83d3424c98b522c45d60e1bc12.png

 如图所示,在Person类域中定义了一个Man类,Man类就是Person的内部类,Person类就是外部类。其中,内部类默认是外部类的友元类,换句话说,外部类(Person)拿内部类(Man)当知心朋友,能告诉朋友一切秘密......值得注意的是,友元权限是单向的,也就是你拿别人当朋友别人不一定拿你当朋友,如果两者都有友元声明就叫相互友元。因此,如图所示外部类无法访问内部类的私人属性。


类创建的成员属性

         在一个类中利用另一个类来实例化对象,这种情况类似于复合函数,当调用这个类来实例化对象时未免会调用到类内对象的构造,下面主要探讨的是像这种类作为成员属性的情况,构造和析构的顺序是怎样的。

51e4704c59874404a6f94f3c641d074d.png

 如图,当直接创建p1对象时,会调用Person的构造函数来为p1初始化,而p1中的变量又包含有Man这个类的对象,在创建m_man时也涉及到该对象的初始化,二者调用构造的顺序是怎样的呢?

b5eed32295ec46be9cedf60f40e0dba1.png

由图不难看出,编译器先调用Man类的构造函数再调用Person的构造函数,换句话说就是先打地基再造楼。而析构的顺序恰好与构造的相反,这是因为如果属性中存在在堆区开辟的空间时,先将类内的m_man释放掉能防止内存泄漏的风险。

         一般情况下,像这种复合类的情况都是先入后出的形式,即构造时先调用其它类的对象,在构造自身,析构与构造相反。

 

以上是本文的主要内容了,主要还是区分好内部类与类作为成员属性的区别就行。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值