【C++】类和对象终章 --内部类和匿名对象,再识类和对象

欢迎来到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能访问A
		void func(A* p1)
		{
			p1->_a1++;
		}
			
	private:
		int _a3;
	};

	//不能访问
	void funB(B* p2)
	{
		p2->_a3++;
	}


private:
	int _a1;
	int _a2;
};

1.2 内部类的特点

 特性:

  1. 内部类可以定义在外部类的public、protected、private都是可以的。
  2. 注意内部类可以直接访问外部类中的static成员,不需要外部类的对象/类名。
  3. 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. 在不需要为对象命名的情况下,使用匿名对象可以节省命名资源,尤其是在命名较为困难或者希望避免命名冲突的场景中。
  3. 由于匿名对象没有名称,所以在创建它们之后无法再次被引用。这意味着如果你需要再次使用同一个对象,那么匿名对象就不适用。

再识类和对象 

现实生活中的实体计算机并不认识,计算机只认识二进制格式的数据。如果想要让计算机认识现 实生活中的实体,用户必须通过某种面向对象的语言,对实体进行描述,然后通过编写程序,创 建对象后计算机才可以认识。比如想要让计算机认识洗衣机,就需要:

  • 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.25C++中的构造函数和析构函数详解链接
2024.04.29构造函数、析构函数在局部、静态以及全局的调用和释放顺序链接
2024.05.01拷贝复制:拷贝构造函数的使用链接
2024.05.03深入浅出C++中深拷贝和浅拷贝链接
2024.05.06

赋值运算符重载,为什么默认实现可能不够?

链接
2024.05.07用C++实现一个日期计算器链接
2024.05.09C/C++中新const用法:const成员链接
2024.05.13再识构造函数:初始化列表新方式链接
2024.05.14类的新成员:static成员和类的好朋友:友元链接

感谢各位同伴的支持,本期C++就讲解到这啦,如果你觉得写的不错的话,可以给个一键三连,点赞,关注+收藏,若有不足,欢迎各位在评论区讨论。   

  • 32
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值