栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

类内嵌套静态结构体并通过作用域限定符访问的方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

类内嵌套静态结构体并通过作用域限定符访问的方法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录
  • 前言
    • 最近在B站看了黑马程序员的入门视频并自行练习职工管理系统的时候,想在类内定义一个静态的结构体来作为链表节点,发现了一些小问题,在此记录一下测试成果和理解。 **有什么问题欢迎指正**
  • 一、`嵌套普通结构体`
    • 1.方法1:类内定义匿名结构体
    • 2.方法2:类外或类内定义结构体,并创建结构体变量
  • 二、`嵌套静态结构体`
    • 1.静态成员变量的组成
    • 2.方法1:通过创建结构体变量实现
    • 3.方法2:不创建结构体变量
  • 总结


前言 最近在B站看了黑马程序员的入门视频并自行练习职工管理系统的时候,想在类内定义一个静态的结构体来作为链表节点,发现了一些小问题,在此记录一下测试成果和理解。
有什么问题欢迎指正 一、嵌套普通结构体 1.方法1:类内定义匿名结构体
class TEST
{
public:
	struct
	{
		int a;
	};
};

int main()
{
	TEST A;
	A.a = 0;//检测是否可以正常使用
}

根据图片可以发现编译器视匿名结构体成员为类成员,故不会调用结构体的构造函数,可以通过类对象调用结构体成员

2.方法2:类外或类内定义结构体,并创建结构体变量
//  类外定义结构体		  //  类内定义结构体
struct test				  //   class TEST
{						  //   { 
	int a;				  //   public:
};						  // 	   struct test
						  // 	   {
class TEST				  //		   int a;
{						  //	   };
public:					  //
	test m_test;		  //	   test m_test;
};						  //   };
						  //
int main()				  //   int main()
{						  //   {
	TEST A;				  //	   TEST A;
	A.m_test.a = 0;		  //	   A.m_test.a = 0;
}						  //   }

在类内或类外定义结构体并在类内创建结构体变量。

二、嵌套静态结构体 1.静态成员变量的组成

静态成员由声明和定义组成,二者缺一不可。

class TEST
{
public:
	static int test;//声明
}
int TEST::test = 0;//定义
2.方法1:通过创建结构体变量实现
class TEST				
{						
public:	
	struct test//结构体定义放在外面也行
	{
		int a;
	};

	static test m_test;//声明静态类成员
};						
TEST::test TEST::m_test = { 0 };//定义静态类成员

int main()				
{
	TEST::m_test.a = 0;//无需创建对象,可以直接通过类名访问
}	

这种方法不难理解,就是上文提到的先声明静态变量再将其定义


3.方法2:不创建结构体变量
class TEST
{						
public:	
	struct test//结构体不能为匿名,否则将会报错“类TEST没有成员a”
	{		   //因为a被static修饰后作用域变为了TEST::<匿名类型>::a
		static int a;//直接将结构体成员定义为静态
	};
};						
int TEST::test::a = 0;

int main()
{
	TEST::test::a = 0;//可以双重作用域限定符直接调用
}
总结

1.类内匿名结构体成员被视为类成员
2.嵌套非匿名结构体需要创建结构体变量才能使用
3.想通过作用域访问而非对象,则需要创建结构体变量并用static修饰,将该变量作为静态成员(不可使用匿名结构体,因为无法声明)
4.也可直接用static修饰结构体成员,无需创建对象,但需要通过完整的作用域(类名::结构体名::静态成员名·)进行访问(不可使用匿名结构体,因为可以声明无法定义)
5.最后也可以使用匿名结构体,但是必须在结构体定义的同时完成创建变量(此方法有些特殊,将声明与定义相融合,省略了一些步骤)。
6.感谢阅读,这些结论全是自行测试得出,因为没查到具体的资料,如有错误欢迎指正:)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1013288.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号