首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

把一个类放在另一个类里面定义和把两个类单独定义有什么区别,该怎么解决

2012-04-01 
把一个类放在另一个类里面定义和把两个类单独定义有什么区别比如(1)classOuter{public:classInner{public:

把一个类放在另一个类里面定义和把两个类单独定义有什么区别
比如
(1)
class   Outer
{
public:
class   Inner
{
public:
Inner()
{
m_nData   =   -9999;
}
int   Get()
{
return   m_nData;
}
void   Set(int   n)
{
m_nData   =   n;
}
private:
int   m_nData;
};
public:
Outer();
private:
Inner   m_obj;
};

(2)
class   Inner
{
public:
Inner()
{
m_nData   =   -9999;
}
int   Get()
{
return   m_nData;
}
void   Set(int   n)
{
m_nData   =   n;
}
private:
int   m_nData;
};
class   Outer
{
public:
Outer();
private:
Inner   m_obj;
};
这两段代码有什么区别?

[解决办法]
有两个方面不一样。
1。作用域不一样。
先看定义在外面的:
class inner{
}
class outer{
}
你想定义一个inner的对象:
inner sample;
就可以了,不管是在outer类的里面,或者是outer的外面,都是同样的方式。但是,如果把类定义在里面,就不一样了:
class outer{
public:
class inner {
}
inner m_inner;
}
outer::inner sample2;
对比一下m_inner和sample2的定义方式,看出来没有,因为inner作用域在outer类内部,所以在outer类内定义inner对象的时候,直接用inner m_inner;的方式就可以了。但是在outer类的外部,则必须使用作用域限定操作符::, outer::inner sample2;
2。访问权限不同。
一个类定义在另一个类的内部,可以有三种访问权限public、private、protect。如果是public访问权限,就像上面例子中的,可以在outer类内部定义inner类的对象,也可以在outer类外面定义inner类的对象,只是写法稍有不同。 如果是private权限,那么只能在outer类的内部主义inner类的对象。protect权限可以在outer类及outer类的派生类内部定义inner类的对象。

热点排行