把一个类放在另一个类里面定义和把两个类单独定义有什么区别
比如
(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类的对象。