1

我正在阅读游戏的框架,它的Door struct内部Room class内容如下:

#include <vector>

class Room{
public:
    struct Door{
        unsigned name;
        unsigned orientation;
        Room* room1;
        Room* room2;
    };
    std::vector<Door*> adjacent;
};

在类中定义结构的目的是什么?而且,定义结构的访问修饰符是否有所不同?

4

4 回答 4

5

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

它只是一个嵌套类型。

而且,定义结构的访问修饰符是否有所不同?

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

于 2012-04-09T17:43:10.400 回答
1

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

举一个明显的例子,大多数容器类型都会将该容器的类型定义iterator为嵌套类(或结构)。尽管vector<T>::iteratordeque<T>::iterator表示相似的概念,但每个概念仍归其关联的容器类型所有,并且特定于其关联的容器类型。

就访问说明符而言,它们遵循通常的规则——如果你定义了一个结构/类定义private,它只会对同一个类中的其他代码可见。如果是protected,则该类及其后代可以看到它。如果它是公开的,那么每个人都可以看到它。

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

class secretary  {};

class executive {
   class secretary {};
};

在这种情况下,a::secretary是“普通”秘书,anexecutive::secretary是执行秘书——尽管显然相似,但执行秘书通常具有与非执行秘书至少有些不同的职位描述。执行副总裁可能有一个执行秘书和两个“普通”秘书,但较低级别的经理可能只被授权拥有一名普通秘书,而不是执行秘书。

在实际的编程中,你经常有私有的嵌套类——不像执行秘书与普通秘书不同,其中一些是世界其他地方甚至根本不知道它们存在的东西(至少除非它们看起来当然在标题的私人部分)。

于 2012-04-09T17:45:43.253 回答
1

在类中定义结构的目的是什么?而且,定义结构的访问修饰符是否有所不同?

关于目的,没有两个人会给你相同的答案,但是我们可以告诉你效果是什么:

  • 在 Room 的范围内,您可以将类称为 Door。

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

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

于 2012-04-09T17:51:44.720 回答
0

简短的回答:除了默认访问之外,在 C++ 中的struct意思class完全相同Door 只是一个嵌套类。换句话说:

struct Door{
    ...

是相同的:

class Door{
    public:
    ...

嵌套类对于组织和文档的原因很有用。它类似于命名空间,但早namespace于 C++。

于 2012-04-09T17:42:29.527 回答