发布网友 发布时间:2022-05-11 06:25
共3个回答
热心网友 时间:2024-02-18 11:35
类定义中嵌套结构体是可以的,这里要分几种情况说明:
对于已经声明的(在类外)结构体类型,在类定义内嵌套结构体变量,没有任何问题。
在类定义内直接定义结构体类型并同时声明结构体变量,也是可以的,但这个结构体类型无法在类外使用。
在类内只定义结构体类型,而不同时声明结构体变量是不可以的(这个在结构体定义内同样如此)。
大多数情况下,我们建议将结构体类型的定义放在类的外面,这样定义的结构体可以在更多的地方(类外)使用,而不会发生使用逻辑歧义和编译错误。
其实类就是在C++中,对C语言结构体的扩展,在C++中可以将结构体看做是一个最简单的类。而“类嵌套”则是C++面向对象涉及的一个应用技巧,用于接口封装(隐藏)和成员共享,但这和嵌套结构体没有太大的关系,有兴趣可以专门看看相关的书籍。
另外,结构体的定义,有两种形式,其中一种带有typedef关键字,另一种不带。这两种定义是由差别的,简单的说,typedef是声明了一种“变量类型”,不带typedef是直接声明结构体变量,具体应用的差别参考结构体声明的相关书籍章节。
热心网友 时间:2024-02-18 11:36
类中可以嵌套结构,调用的时候前面要加类名。热心网友 时间:2024-02-18 11:36
在一个类的内部定义另一个类或结构体,我们称之为嵌套类(nested class),或者嵌套类型。之所以引入这样一个嵌套类,往往是因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现,且同时可以对用户隐藏该底层实现。
虽然嵌套类在外围类内部定义,但它是一个独立的类,基本上与外围类不相关。它的成员不属于外围类,同样,外围类的成员也不属于该嵌套类。嵌套类的出现只是告诉外围类有一个这样的类型成员供外围类使用。并且,外围类对嵌套类成员的访问没有任何特权,嵌套类对外围类成员的访问也同样如此,它们都遵循普通类所具有的标号访问控制。
前面说过,之所以使用嵌套类的另一个原因是达到底层实现隐藏的目的。为了实现这种目的,我们需要在另一个头文件中定义该嵌套类,而只在外围类中前向声明这个嵌套类即可。当然,在外围类外面定义这个嵌套类时,应该使用外围类进行限定。使用时,只需要在外围类的实现文件中包含这个头文件即可。
另外,嵌套类可以直接引用外围类的静态成员、类型名和枚举成员,即使这些是private的。
实例如下:
#ifndef NESTCLASS_H_在嵌套类的定义被看到之前我们只能声明嵌套类的指针和引用,如上面在A中定义为B m_b而不是B* m_b将会引发一个编译错误。关于C++嵌套类的详细用法请参考《C++ Primer 第三版》P551