游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2708|回复: 6

类定义中包含另一个类的定义

[复制链接]

36

主题

109

帖子

111

积分

注册会员

Rank: 2

积分
111
发表于 2008-7-11 15:32:00 | 显示全部楼层 |阅读模式
我们经常看到下面的情况,就是一个类定义中包含另一个类的定义,如下:
class BODY
{
class HEAD
{
int a;

};
HEAD b;
int c;


};

这里我不知道他为什么不把HEAD类定义在BODY类外面,不知道这样做是不是有什么特殊的目的。
我的意思是这样:
class HEAD
{
  int a;
};

class BODY
{
   HEAD b;
   int c;
};

56

主题

758

帖子

768

积分

高级会员

Rank: 4

积分
768
发表于 2008-7-11 17:06:00 | 显示全部楼层

Re:类定义中包含另一个类的定义

使得HEAD类为BODY类的私有子类,就像头是身体的一部分一样,等价于:
class BODY
{
private:
class HEAD
{
int a;

};
HEAD b;
int c;
};

36

主题

109

帖子

111

积分

注册会员

Rank: 2

积分
111
 楼主| 发表于 2008-7-14 15:48:00 | 显示全部楼层

Re:类定义中包含另一个类的定义

没明白,是不是说head类以后都不能在其他地方使用了,只有在body类可见。

1

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2008-8-1 13:34:00 | 显示全部楼层

Re:类定义中包含另一个类的定义

上面的head类是在body的private标号下的,所以body::head这个嵌套类只能被body和body的友元用来定义对象.

class BODY
{
class HEAD
{
int a;

};
HEAD b;
int c;


};
等价于:
class BODY
{
private:
class HEAD;
HEAD b;
int c;
};

class BODY::HEAD
{
int a;
};

1

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2008-8-1 13:38:00 | 显示全部楼层

Re:类定义中包含另一个类的定义

接着上面的:

这样的主要作用是 使 HEAD这个名字不是全局可见的.
具体参考 c++primer 第4版的 658页(似乎对应英文版的786页)

36

主题

109

帖子

111

积分

注册会员

Rank: 2

积分
111
 楼主| 发表于 2008-8-7 13:56:00 | 显示全部楼层

Re:类定义中包含另一个类的定义

好的,非常感谢各位,终于明白用意了

56

主题

758

帖子

768

积分

高级会员

Rank: 4

积分
768
发表于 2008-8-7 16:29:00 | 显示全部楼层

Re: Re:类定义中包含另一个类的定义

bloodelf: Re:类定义中包含另一个类的定义

接着上面的:

这样的主要作用是 使 HEAD这个名字不是全局可见的.
具体参考 c++primer 第4版的 658页(似乎对应英文版的786页)

658页??我的妈呀,C++ primer 是本辞典吧?!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 17:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表