欢迎来到CILMY23的博客
🏆本篇主题为: 类和对象终章 --内部类和匿名对象,再识类和对象
🏆个人主页:CILMY23-CSDN博客
🏆系列专栏:Python | C++ | C语言 | 数据结构与算法 | 贪心算法 | Linux
🏆感谢观看,支持的可以给个一键三连,点赞关注+收藏。
✨写在前头:
一个月我们终于来到类和对象终章了,本篇我们将结束类和对象的学习,剩下的语法是内部类和
匿名对象,这两部分语法较为简单。
内部类
1.1 内部类的概念
如果一个类定义在另一个类的内部,这个类中类就叫做内部类。这种类也被称为嵌套类。内部类是一个独立的类, 它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。
例如:
//内部类
class A
{
public://B是内部类//B这个类受到A类的限制class B{private:int _a3;};private:int _a1;int _a2;
};int main()
{A aa;//定义内部类的对象A::B bb;return 0;
}
注意:内部类就是外部类的友元类,参见友元类的定义,内部类可以通过外部类的对象参数来访 问外部类中的所有成员。但是外部类不是内部类的友元。
例如:
//内部类
class A
{
public://B是内部类//B是A的友元,这意味着B能够访问A的私有成员//但A不是B的友元,这意味着A不能访问B的私有成员//B这个类受到A类的限制class B{public://B能访问Avoid func(A* p1){p1->_a1++;}private:int _a3;};//不能访问void funB(B* p2){p2->_a3++;}private:int _a1;int _a2;
};
1.2 内部类的特点
特性:
- 内部类可以定义在外部类的public、protected、private都是可以的。
- 注意内部类可以直接访问外部类中的static成员,不需要外部类的对象/类名。
- sizeof(外部类)=外部类,和内部类没有任何关系。
匿名对象
2.1 匿名对象的概念
匿名对象是没有名称的对象。在编程中,通常当一个对象仅需要被使用一次时会创建匿名对象。它们是即时生成并使用的,通常用于直接调用方法或访问属性后即被丢弃,不需要再次引用。
例如:
//匿名对象
class A
{
public:A(int a = 0):_a(a){cout << "A(int a)" << endl;}~A() {cout << "~A()" << endl;}
private:int _a;
};int main()
{//有名对象A aa1;A aa2;//匿名对象A();A(11);return 0;
}
2.2 匿名对象的特点
- 匿名对象的生命周期只在当前这一行,通常用于只需要一次使用的场景。它们在创建后立即用于某个操作,然后就不再使用。
- 在不需要为对象命名的情况下,使用匿名对象可以节省命名资源,尤其是在命名较为困难或者希望避免命名冲突的场景中。
- 由于匿名对象没有名称,所以在创建它们之后无法再次被引用。这意味着如果你需要再次使用同一个对象,那么匿名对象就不适用。
再识类和对象
现实生活中的实体计算机并不认识,计算机只认识二进制格式的数据。如果想要让计算机认识现 实生活中的实体,用户必须通过某种面向对象的语言,对实体进行描述,然后通过编写程序,创 建对象后计算机才可以认识。比如想要让计算机认识洗衣机,就需要:
- 1. 用户先要对现实中洗衣机实体进行抽象---即在人为思想层面对洗衣机进行认识,洗衣机有什 么属性,有那些功能,即对洗衣机进行抽象认知的一个过程
- 2. 经过1之后,在人的头脑中已经对洗衣机有了一个清醒的认识,只不过此时计算机还不清 楚,想要让计算机识别人想象中的洗衣机,就需要人通过某种面相对象的语言(比如:C++、 Java、Python等)将洗衣机用类来进行描述,并输入到计算机中
- 3. 经过2之后,在计算机中就有了一个洗衣机类,但是洗衣机类只是站在计算机的角度对洗衣 机对象进行描述的,通过洗衣机类,可以实例化出一个个具体的洗衣机对象,此时计算机才 能洗衣机是什么东西。
- 4. 用户就可以借助计算机中洗衣机对象,来模拟现实中的洗衣机实体了。
类是对某一类实体(对象)来进行描述的,描述该对象具有哪些属性,哪些方法,描述完成后就形成了一种新的自定义类型,才用该自定义类型就可以实例化具体的对象。
💡总结
1️⃣如果一个类定义在另一个类的内部,这个类中类就叫做内部类。内部类受到外部类类域的限制。
2️⃣内部类就是外部类的友元类,内部类可以访问外部类的私有成员,但是外部类不能访问内部类的私有成员。
3️⃣sizeof(外部类)=外部类,和内部类没有任何关系。
4️⃣匿名对象的生命周期只在当前这一行,通常用于只需要一次使用的场景。
类和对象往期文章:
发布日期 | 主题名称 | 链接 |
2024.04.19 | C语言转型之路:从C到C++的类与对象初探 | 链接 |
2024.04.23 | 类和对象初探:类的实例化与对象生命周期管理,解析this指针的奥秘 | 链接 |
2024.04.25 | C++中的构造函数和析构函数详解 | 链接 |
2024.04.29 | 构造函数、析构函数在局部、静态以及全局的调用和释放顺序 | 链接 |
2024.05.01 | 拷贝复制:拷贝构造函数的使用 | 链接 |
2024.05.03 | 深入浅出C++中深拷贝和浅拷贝 | 链接 |
2024.05.06 | 赋值运算符重载,为什么默认实现可能不够? | 链接 |
2024.05.07 | 用C++实现一个日期计算器 | 链接 |
2024.05.09 | C/C++中新const用法:const成员 | 链接 |
2024.05.13 | 再识构造函数:初始化列表新方式 | 链接 |
2024.05.14 | 类的新成员:static成员和类的好朋友:友元 | 链接 |
感谢各位同伴的支持,本期C++就讲解到这啦,如果你觉得写的不错的话,可以给个一键三连,点赞,关注+收藏,若有不足,欢迎各位在评论区讨论。