我正在阅读游戏框架,Door
struct
内部有一个Room
class
,如下所示:
#include <vector>
class Room{
public:
struct Door{
unsigned name;
unsigned orientation;
Room* room1;
Room* room2;
};
std::vector<Door*> adjacent;
};
在类中定义结构的目的是什么?而且,结构定义的访问修饰符会产生什么影响?
答案 0 :(得分:5)
在类中定义结构的目的是什么?
它只是一种嵌套类型。
并且,使用结构定义的访问修饰符会产生什么影响?
如果Door
被声明为private
,那么尝试在此类之外声明类型Room::Door
的变量将会出错。
答案 1 :(得分:1)
目的是创建一个类型,不仅该类型的实例由周围的类拥有,而且类型本身也由周围的类拥有。
对于一个明显的示例,大多数容器类型将该容器的iterator
类型定义为嵌套类(或结构)。尽管vector<T>::iterator
和deque<T>::iterator
代表了类似的概念,但每个概念仍归其相关容器类型所有,并且特定于其相关容器类型。
就访问说明符而言,它们遵循通常的规则 - 如果您创建结构/类定义private
,它将只对同一类中的其他代码可见。如果它是protected
,则该类及其后代将可见。如果它是公开的,那么每个人都可以看到它。
举一个更具体的例子,对于企业中的职位,你可能有:
class secretary {};
class executive {
class secretary {};
};
在这种情况下,::secretary
是一名“正常”秘书而executive::secretary
是执行秘书 - 虽然显然相似,但执行秘书通常会有一份至少有所不同的职位描述来自非执行秘书。执行副总裁可能有一名执行秘书和两名“正常”秘书,但是一名下级经理可能只被授权拥有一名正常的秘书,而不是执行秘书。
在真正的编程中,你经常有私人嵌套类 - 不像执行秘书那样与普通秘书不同,其中一些是世界其他地方根本不知道它们存在的东西(至少除非他们当然看到标题的私处部分。)
答案 2 :(得分:1)
在类中定义结构的目的是什么?而且,结构定义的访问修饰符会产生什么影响?
没有两个人会给出与目的相同的答案,但我们可以告诉你效果是什么:
在Room的范围内,您可以将课程称为Just。
在Room的范围之外,您必须将课程称为Room :: Door
是的,类型的可见性与任何类成员相同,并受私人,受保护和公开影响。
答案 3 :(得分:0)
简短回答:struct
和class
表示与C ++完全相同,除了默认访问权限。门只是一个嵌套的类。换句话说:
struct Door{
...
与:
相同class Door{
public:
...
嵌套类对于组织和文档原因很有用。它就像名称空间,但在C ++中早于namespace
。