当前位置: 首页 > news >正文

内部类与类作为成员属性

前言

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

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

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


内部类

        内部类的特点:

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

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

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

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


类作为成员属性

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

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

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

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

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


http://www.mrgr.cn/news/41939.html

相关文章:

  • pdf处理1
  • 4.6章节python中空语句pass保留字作用
  • Maven项目管理入门:POM文件详解与依赖管理
  • 如何评估和部署 IT 运维系统?
  • React Fiber 详解
  • [Linux][进程] 进程终止
  • JS测试框架——Jest
  • 进度条(倒计时)Linux
  • 【力扣 | SQL题 | 每日四题】力扣1783,1757,1747,1623,1468,1661
  • SpringCloud入门(十一)路由过滤器和路由断言工厂
  • MHA携手Atlas:打造高效读写分离解决方案,引领数据库性能飞跃
  • 深度学习数据增强的常用方法
  • 【Matlab绘图】从Excel导入表格并进行三维绘图
  • leetcode 数组 27.移除元素
  • 中断和异常
  • Ray_Tracing_In_One_Weekend下
  • Git版本控制工具--关于命令
  • 武汉自闭症儿童寄宿学校:让孩子快乐成长
  • 易贝恩副总经理朱洪泽受邀为第四届中国项目经理大会演讲嘉宾
  • VirtulBOX Ubuntu22安装dpdk23.11