类与对象(三)--内部类、匿名对象

简介: 类与对象(三)--内部类、匿名对象

1.内部类🎧

1.1 内部类的基本概念🎧

🔎如果一个类定义在另一个类的内部,这个类就叫做内部类。内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员外部类对内部类没有任何优越的访问权限。

🔎外部类和内部类的区分是相对的,对于A类来说,B类定义在它的类体里面,所以B类就是A类的内部类,相反,对于B类来说,A类是B类的外部类。外部类对于内部类来说,没有任何优越的访问权限,但是内部类却能通过外部类的对象参数来访问外部类中的所有成员。

🔎这两个类依旧是相互独立的,只不过内部类B是外部类A的友元类。

1.1含有内部类的A类对象如何计算字节大小呢?🎧

🔎 将内部类B看成是外部类A的一个友元类,相互独立,内部类无论变量有多少都不会影响外部类,对于外部类来说也同样如此。所以我们sizeofA类对象的时候只会得出A类对象自己的变量总大小。

1.2内部类的特性🎧

1️⃣. 内部类可以定义在外部类的public、protected、private都是可以的。

2️⃣. 注意内部类可以直接访问外部类中的static成员,不需要外部类的对象/类名。

3️⃣. sizeof(外部类)=外部类,和内部类没有任何关系。

1.3内部类的使用场景

1️⃣ .封装和组织代码: 内部类可以用于实现更好的封装,将相关的类组织在一起,使得代码更加清晰和可维护。通过将内部类放置在外部类中,可以在一定程度上隐藏实现的细节。

2️⃣.实现接口或抽象类的多继承: Java中一个类只能继承一个类,但是可以实现多个接口。使用内部类可以实现多继承的效果,通过一个类内部包含多个内部类,每个内部类分别实现一个接口或继承一个抽象类。

3️⃣事件处理: 内部类常常用于处理事件,特别是在图形用户界面(GUI)编程中。通过在内部类中实现事件处理代码,可以轻松地访问外部类的成员变量和方法,同时保持代码的组织结构。

4️⃣.实现迭代器或集合类: 内部类可以用于实现迭代器或集合类,这样可以更方便地访问外部类的私有成员,并且可以隐藏实现的细节。

5️⃣.工厂模式: 内部类可以被用作工厂模式的一部分,尤其是在创建对象时需要访问外部类的实例变量的情况下。内部类可以轻松访问其外部类的私有成员。

6️⃣.私有实现: 如果一个类只在一个地方使用,可以考虑将其作为外部类的内部类,以减少对该类的公开访问。这有助于维护代码的封装性。

2.匿名对象🎧

🔎匿名对象是指在创建对象的同时没有为其分配一个明确的变量。通常,匿名对象仅在创建时使用一次,不会被其他部分的代码引用。匿名对象的特点就是不用取名字,且生命周期很短,几乎只有一行

🔎这些例子在展示匿名对象的使用方式,但在实际的C++编程中,通常更推荐为对象分配一个有意义的变量名,以提高代码的可读性和维护性。匿名对象的使用应该谨慎,特别是在代码复杂度增加时。

相关文章
【JavaSE专栏63】多态,父类引用子类的对象,面向对象编程中的重要概念
【JavaSE专栏63】多态,父类引用子类的对象,面向对象编程中的重要概念
|
1月前
|
存储 编译器 C语言
C++入门2——类与对象1(类的定义和this指针)
C++入门2——类与对象1(类的定义和this指针)
30 2
|
6月前
|
存储 算法 C语言
【C++入门到精通】C++入门 —— 类和对象(初始化列表、Static成员、友元、内部类、匿名对象)
一、初始化列表 ⭕初始化列表概念 ⭕初始化列表的优点 ⭕使用场景 ⭕explicit关键字 二、Static成员 ⭕Static成员概念 🔴静态数据成员: 🔴静态函数成员: ⭕使用静态成员的
112 0
|
4月前
|
Java
Java面向对象 ( 类与对象 | 构造方法 | 方法的重载 )
Java面向对象 ( 类与对象 | 构造方法 | 方法的重载 )
|
算法 C++
【C++入门到精通】C++入门 —— 类和对象(初始化列表、Static成员、友元、内部类、匿名对象)下
【C++入门到精通】C++入门 —— 类和对象(初始化列表、Static成员、友元、内部类、匿名对象)下
78 0
【C++入门到精通】C++入门 —— 类和对象(初始化列表、Static成员、友元、内部类、匿名对象)下
|
6月前
|
存储 编译器 程序员
【C++】类和对象①(什么是面向对象 | 类的定义 | 类的访问限定符及封装 | 类的作用域和实例化 | 类对象的存储方式 | this指针)
【C++】类和对象①(什么是面向对象 | 类的定义 | 类的访问限定符及封装 | 类的作用域和实例化 | 类对象的存储方式 | this指针)
|
Java 编译器 C++
【C++基础】类与对象(下) 初始化列表、友元、内部类、匿名对象
【C++基础】类与对象(下) 初始化列表、友元、内部类、匿名对象
62 0
【C++基础】类与对象(下) 初始化列表、友元、内部类、匿名对象
|
存储 安全 编译器
【C++基础】类与对象(上):访问限定符、类作用域、类实例化、类对象模型、this指针
【C++基础】类与对象(上):访问限定符、类作用域、类实例化、类对象模型、this指针
122 0
|
存储 C语言 C++
【C++入门到精通】C++入门 —— 类和对象(初始化列表、Static成员、友元、内部类、匿名对象)上
【C++入门到精通】C++入门 —— 类和对象(初始化列表、Static成员、友元、内部类、匿名对象)上
92 0
|
算法 编译器 C语言
【C++技能树】类和对象的使用 --初始化列表,static,友元,内部类,匿名对象的理解与使用
虽然我们大多时候混淆初始化与赋值的概念,但在这里,构造函数体中只能成为赋值,因为初始化只能初始化一次,而赋值可以赋值多次。那么在哪里进行初始化呢?可能会说在定义时直接初始化,这在日期类中是可以的,但在这种情况当中,显然是不可以的了
67 0