类定义中嵌套结构体是可以的,这里要分几种情况说明:
对于已经声明的(在类外)结构体类型,在类定义内嵌套结构体变量,没有任何问题。
在类定义内直接定义结构体类型并同时声明结构体变量,也是可以的,但这个结构体类型无法在类外使用。
在类内只定义结构体类型,而不同时声明结构体变量是不可以的(这个在结构体定义内同样如此)。
大多数情况下,我们建议将结构体类型的定义放在类的外面,这样定义的结构体可以在更多的地方(类外)使用,而不会发生使用逻辑歧义和编译错误。
其实类就是在C++中,对C语言结构体的扩展,在C++中可以将结构体看做是一个最简单的类。而“类嵌套”则是C++面向对象涉及的一个应用技巧,用于接口封装(隐藏)和成员共享,但这和嵌套结构体没有太大的关系,有兴趣可以专门看看相关的书籍。
另外,结构体的定义,有两种形式,其中一种带有typedef关键字,另一种不带。这两种定义是由差别的,简单的说,typedef是声明了一种“变量类型”,不带typedef是直接声明结构体变量,具体应用的差别参考结构体声明的相关书籍章节。
在一个类的内部定义另一个类或结构体,我们称之为嵌套类(nested class),或者嵌套类型。之所以引入这样一个嵌套类,往往是因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现,且同时可以对用户隐藏该底层实现。
虽然嵌套类在外围类内部定义,但它是一个独立的类,基本上与外围类不相关。它的成员不属于外围类,同样,外围类的成员也不属于该嵌套类。嵌套类的出现只是告诉外围类有一个这样的类型成员供外围类使用。并且,外围类对嵌套类成员的访问没有任何特权,嵌套类对外围类成员的访问也同样如此,它们都遵循普通类所具有的标号访问控制。
前面说过,之所以使用嵌套类的另一个原因是达到底层实现隐藏的目的。为了实现这种目的,我们需要在另一个头文件中定义该嵌套类,而只在外围类中前向声明这个嵌套类即可。当然,在外围类外面定义这个嵌套类时,应该使用外围类进行限定。使用时,只需要在外围类的实现文件中包含这个头文件即可。
另外,嵌套类可以直接引用外围类的静态成员、类型名和枚举成员,即使这些是private的。
实例如下:
#ifndef NESTCLASS_H_在嵌套类的定义被看到之前我们只能声明嵌套类的指针和引用,如上面在A中定义为B m_b而不是B* m_b将会引发一个编译错误。关于C++嵌套类的详细用法请参考《C++ Primer 第三版》P551
追问嵌套结构体为什么不可以呢
追答struct 里可以包含struct
例如
typedef struct tagstru1
{
int a;
int b;
}stru1;
typedef struct tagstru2
{
int a;
int b;
stru1 s;
}stru2;
stru2 里就包含了 stru1
这就是嵌套
不好意思刚才没说清楚,是为什么不能在类定义中嵌套结构体定义,谢谢你
追答结构体相当于类,它也可以用public\private修饰,只不过我们一般不用。应该把他定义在类的外面,类中间可以包含这个结构体的成员变量。
本回答被提问者采纳结构体可以嵌套定义吗
类定义中嵌套结构体是可以的,这里要分几种情况说明:对于已经声明的(在类外)结构体类型,在类定义内嵌套结构体变量,没有任何问题。在类定义内直接定义结构体类型并同时声明结构体变量,也是可以的,但这个结构体类型无法在类外使用。在类内只定义结构体类型,而不同时声明结构体变量是不可以的(这个...
c语言中不允许函数嵌套定义的原因是什么?
C语言中,所有函数的定义都是互相平行和独立的,一个函数的定义不能包含另一个函数的定义,即不允许函数的嵌套定义。但函数的调用可以通过用一个函数调用另一个函数来实现,这就形成了函数的嵌套调用!C语言不限制嵌套的个数和层数,这样我们就可以自由,合理的组织程序的模块结构。
结构体类型的定义允许嵌套是指
你想多了,代码struct DATE birthday表示结构体CHARACTER中有一个DATE类型的数据成员,而DATE结构已经在上面定义了,所以并不存在问题。结构体可以嵌套使用不能嵌套定义是指结构体在定义时不能含有他自己定义的成员变量,但是可以含有自己定义的指针。比如:struct DATA { int month; ...
嵌套是什么意思
在C语言中,虽然函数定义不允许相互嵌套,但函数调用则允许在函数内部调用其他函数,实现了代码的模块化和复用。嵌套也有其独特的特点。首先,对象的嵌套促进了代码复用,当你使用面向对象编程时,可以重用已有的代码模块,这对于提高代码效率和维护性非常关键。其次,标准对象的嵌套使得它们更容易被多个应用或...
嵌套简介
然而,C语言在函数定义的层面有所限制,不允许一个函数的定义嵌套在另一个函数的定义中,即不允许函数的嵌套定义。尽管如此,通过嵌套调用,函数之间的协作得以实现,这为程序模块的组织提供了灵活性。C语言并不限制嵌套的深度,因此程序员可以根据需要自由地设计和组织程序的结构,以达到代码的模块化和可...
嵌套结构是什么(嵌套结构是什么意思)
在写作上,嵌套式结构也可以称为套层式结构,它是一个来自于叙事学的术语,原意指的是一环套一环的复杂的叙事结构。是一个故事中穿插另一个故事、一条线索引出另一条线索、一个人物带出另一个人物的一种特殊的叙事结构。例如在著名的《一千零一夜》里,经常遇到一个故事中套着另一个故事,然后...
嵌套结构是什么?
分论点“为什么”就是对论点之所以成立进行具体阐述,其中可运用事物发展顺序、平行结构或正反结构具体论证。并且可在此部分嵌套其他结构去丰富论证文章。例如:论点:尊重劳动者,关爱劳动者 分论点(为什么)——嵌套“由小到大、由轻到重”(1)对普通劳动者的尊重和关爱,体现个人素质的提高。(2)对普通...
嵌套是什么意思
这种关系可以存在于各种大小、形状和功能的事物中。嵌套不仅增加了事物的层次感和复杂性,也提高了其使用的灵活性和便利性。二、技术领域的嵌套应用 在计算机科学和技术领域,嵌套的应用更是无处不在。如函数的嵌套调用、循环的嵌套使用等。这种嵌套的逻辑结构不仅出现在编程中,还体现在网页设计、数据库...
嵌套结构是什么
形成复杂而富有深度的叙事层次。在计算机世界中,嵌套结构表现为代码的嵌套,如在已有的数据结构或函数中嵌套使用其他元素,如表格、图像或函数。例如,在C语言中,函数的执行被限制在函数体内,调用函数时,可以是直接嵌套调用,也可以通过递归的方式一层层展开,这种结构使得程序逻辑更为有序且灵活。
嵌套结构体问题。
2,而当把这个结构体的本身作为自身变量的时候,你就无法知道这个变量具体占用的内存空间是多少,所以在给变量分配空间的时候就无法分配,所以说错误,(就好比你定义一个数组,一定要指定这个数组有多少个元素,要不然计算机也没办法知道你这个数组到底需要多少内存空间,它就无法分配内存)当结构体本身作为自身变量的...