在类中声明struct

时间:2012-04-09 17:39:53

标签: c++ class struct

我正在阅读游戏框架,Door struct内部有一个Room class,如下所示:

#include <vector>

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

在类中定义结构的目的是什么?而且,结构定义的访问修饰符会产生什么影响?

4 个答案:

答案 0 :(得分:5)

  

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

它只是一种嵌套类型。

  

并且,使用结构定义的访问修饰符会产生什么影响?

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

答案 1 :(得分:1)

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

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

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

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

class secretary  {};

class executive {
   class secretary {};
};

在这种情况下,::secretary是一名“正常”秘书而executive::secretary是执行秘书 - 虽然显然相似,但执行秘书通常会有一份至少有所不同的职位描述来自非执行秘书。执行副总裁可能有一名执行秘书和两名“正常”秘书,但是一名下级经理可能只被授权拥有一名正常的秘书,而不是执行秘书。

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

答案 2 :(得分:1)

  

在类中定义结构的目的是什么?而且,结构定义的访问修饰符会产生什么影响?

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

  • 在Room的范围内,您可以将课程称为Just。

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

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

答案 3 :(得分:0)

简短回答:structclass表示与C ++完全相同,除了默认访问权限。门只是一个嵌套的类。换句话说:

struct Door{
    ...

与:

相同
class Door{
    public:
    ...

嵌套类对于组织和文档原因很有用。它就像名称空间,但在C ++中早于namespace