C++ 在类内声明结构

C++ 在类内声明结构,c++,class,struct,C++,Class,Struct,我正在阅读一个游戏的框架,它在房间类内有一个门结构,如下所示: #include <vector> class Room{ public: struct Door{ unsigned name; unsigned orientation; Room* room1; Room* room2; }; std::vector<Door*> adjacent; }; #包括 教室{ 公众:

我正在阅读一个游戏的框架,它在
房间
内有一个
结构
,如下所示:

#include <vector>

class Room{
public:
    struct Door{
        unsigned name;
        unsigned orientation;
        Room* room1;
        Room* room2;
    };
    std::vector<Door*> adjacent;
};
#包括
教室{
公众:
结构门{
未签名的名称;
无符号定向;
房间*房间1;
房间*房间2;
};
std::向量邻接;
};

在类内部定义结构的目的是什么?那么,结构定义的访问修饰符是否有区别?

简短的答案:<代码>结构> <代码>和<代码>类< /C> >在C++中,意思是完全相同的东西,除了默认访问。Door只是一个嵌套类。换言之:

struct Door{
    ...
同:

class Door{
    public:
    ...

出于组织和文档方面的原因,嵌套类很有用。它就像命名空间,但在C++中,代码之前>代码>命名空间< /代码>。< P>简短答案:<代码>结构> <代码>和<代码>类< /C> >在C++中,意思是完全相同的东西,除了默认访问。Door只是一个嵌套类。换言之:

struct Door{
    ...
同:

class Door{
    public:
    ...
出于组织和文档方面的原因,嵌套类很有用。它就像命名空间,但在C++中,早于代码>命名空间< /代码>。 在类内部定义结构的目的是什么

它只是一个嵌套类型

而且,定义结构时使用什么访问修饰符有区别吗

如果
Door
已声明
private
,则尝试在此类之外声明类型为
Room::Door
的变量将出错

在类内部定义结构的目的是什么

它只是一个嵌套类型

而且,定义结构时使用什么访问修饰符有区别吗


如果
Door
被声明为
private
,则尝试在此类之外声明类型为
Room::Door
的变量将出现错误。

目的是创建一个不仅该类型的实例由周围类拥有,而且该类型本身也由周围类拥有的类型

举个明显的例子,大多数容器类型将该容器的
迭代器
类型定义为嵌套类(或结构)。尽管
vector::iterator
deque::iterator
代表了类似的概念,但它们仍然由其关联的容器类型所拥有,并且是特定的

就访问说明符而言,它们遵循通常的规则——如果您将结构/类定义设置为私有的,那么它将只对同一类中的其他代码可见。如果它受
保护
,则该类及其子类将可见。如果是公共的,每个人都可以看到

举一个更具体的例子,对于企业中的职位,您可能有:

class secretary  {};

class executive {
   class secretary {};
};
在这种情况下,
::秘书
是一个“正常”的秘书,
执行::秘书
是一个执行秘书——虽然显然相似,但执行秘书的工作描述通常至少与非执行秘书有所不同。执行副总裁可能有一名执行秘书和两名“普通”秘书,但较低级别的经理可能只授权有一名普通秘书,而不是执行秘书


在实际编程中,您通常有私有嵌套类——与执行秘书不同的是,执行秘书与普通秘书完全不同,其中一些是世界上其他人根本不知道它们存在的东西(当然,除非他们查看标题的私有部分).

目的是创建一个类型,不仅该类型的实例由周围类拥有,而且该类型本身也由周围类拥有

举个明显的例子,大多数容器类型将该容器的
迭代器
类型定义为嵌套类(或结构)。尽管
vector::iterator
deque::iterator
代表了类似的概念,但它们仍然由其关联的容器类型所拥有,并且是特定的

就访问说明符而言,它们遵循通常的规则——如果您将结构/类定义设置为私有的,那么它将只对同一类中的其他代码可见。如果它受
保护
,则该类及其子类将可见。如果是公共的,每个人都可以看到

举一个更具体的例子,对于企业中的职位,您可能有:

class secretary  {};

class executive {
   class secretary {};
};
在这种情况下,
::秘书
是一个“正常”的秘书,
执行::秘书
是一个执行秘书——虽然显然相似,但执行秘书的工作描述通常至少与非执行秘书有所不同。执行副总裁可能有一名执行秘书和两名“普通”秘书,但较低级别的经理可能只授权有一名普通秘书,而不是执行秘书

在实际编程中,您通常有私有嵌套类——与执行秘书不同的是,执行秘书与普通秘书完全不同,其中一些是世界上其他人根本不知道它们存在的东西(当然,除非他们查看标题的私有部分)

在类内部定义结构的目的是什么?而且,定义结构时使用什么访问修饰符有区别吗

没有两个人会给出与目的相同的答案,但是我们可以告诉您影响是什么:

  • 在房间的范围内,你可以把这个类称为门

  • 在Room的范围之外,您必须将该类称为Room::Door

  • 是的,类型的可见性与任何类成员相同,并且受私有、受保护和公共的影响

在中定义结构的目的是什么