在类内部声明结构
declaring struct inside of a class
我正在阅读一个游戏框架,它在Room
class
内部有一个Door
struct
,如下所示:
#include <vector>
class Room{
public:
struct Door{
unsigned name;
unsigned orientation;
Room* room1;
Room* room2;
};
std::vector<Door*> adjacent;
};
在类内部定义结构的目的是什么?而且,定义结构的访问修饰符有什么区别吗?
在类内部定义结构的目的是什么?
它只是一个嵌套类型。
而且,定义结构的访问修饰符有什么区别吗?
如果Door
声明private
则尝试在此类之外声明类型 Room::Door
的变量将给出错误。
在类内部定义结构的目的是什么?而且,定义结构的访问修饰符有什么区别吗?
没有两个人会给你相同的答案,但是我们可以告诉你效果是什么:
-
在"房间"的范围内,您可以将类称为"门"。
-
在 Room 范围之外,您必须将该类称为 Room::D oor
-
是的,类型的可见性与任何类成员相同,并且受私有、受保护和公共的影响。
目的是创建一个类型,该类型不仅该类型的实例由周围的类拥有,而且类型本身也由周围的类拥有。
对于一个明显的例子,大多数容器类型会将该容器的iterator
类型定义为嵌套类(或结构)。尽管vector<T>::iterator
和deque<T>::iterator
表示类似的概念,但每个概念仍由其关联的容器类型拥有并特定于其关联容器类型。
就访问说明符而言,它们遵循通常的规则 - 如果您将结构/类定义private
,则它仅对同一类中的其他代码可见。如果它是protected
的,它将对该类及其后代可见。如果它是公开的,那么每个人都可以看到它。
举一个更具体的例子,对于企业的职位,您可能有:
class secretary {};
class executive {
class secretary {};
};
在这种情况下,::secretary
是"正常"秘书,executive::secretary
是执行秘书 - 尽管明显相似,但执行秘书的职位描述通常至少与非执行秘书的职位描述有些不同。执行副总裁可能有一个执行秘书和两个"正常"秘书,但较低级别的经理可能只被授权有一个普通的秘书,而不是执行秘书。
在实际编程中,你经常有私有嵌套类——不像执行秘书与普通秘书不同,其中一些是世界其他地方甚至根本不知道它们存在的东西(至少除非他们查看标题的私有部分当然)。
简短回答:struct
和class
在C++中的意思完全相同,除了默认访问。门只是一个嵌套类。换句话说:
struct Door{
...
与以下相同:
class Door{
public:
...
嵌套类对于组织和文档原因很有用。它类似于命名空间,但在C++中早于namespace
。
- 为什么 C++ 中的以下结构声明会导致退出 127?
- 在.cpp文件之间传递结构声明,而不使用全局头文件
- 结构声明中的 if 语句C++
- 这个嵌套结构声明是什么意思?
- 在结构声明的分号之前声明的结构变量是否为全局变量
- 为什么结构声明在C++中违反了 ODR
- 错误:多个文件中的结构声明冲突
- 为什么调用定义的构造函数会导致结构声明中出现错误,我该如何修复它
- C++数据结构声明
- 相互依赖的结构声明
- 结构声明的数组
- 结构声明中的":"是什么意思
- 面向C++的main.cpp中的可视化结构声明问题
- 当某些结构字段被省略或与结构声明中的顺序不同时,如何实现正确的解析?
- 编译器在转发结构声明上出错
- C++生成器 XE4 中的结构声明
- 我无法理解c ++中的结构声明
- 嵌套结构声明以及如何访问它们
- 将包含单个数组的结构声明为packed有什么缺点吗
- 定义之前的结构声明