17 内部类
就是在别的类里面定义的类就是内部类
#include <stdio.h>
#include <windows.h>
class COutter
{
private:
int m_nOut;
public:
COutter(){}
COutter(int nOut)
{
m_nOut = nOut;
}
};
class CInner
{
private:
int m_nIn;
public:
CInner(){}
CInner(int nIn)
{
m_nIn = nIn;
}
};
int main(int argc, char* argv[])
{
return 0;
}
我把 CInner 类放到 Coutter 类里面
#include <stdio.h>
#include <windows.h>
class COutter
{
private:
int m_nOut;
public:
COutter(){}
COutter(int nOut)
{
m_nOut = nOut;
}
class CInner
{
private:
int m_nIn;
public:
CInner(){}
CInner(int nIn)
{
m_nIn = nIn;
}
};
};
int main(int argc, char* argv[])
{
return 0;
}
那么 CInner 就是内部类, COutter 就是外部类
内部类与外部类没有任何关系
那么我们这个内部类怎么用呢 ? 在外边创建内部类的对象的话就要写完整的名字
COutter::CInner c;
如果你要想在外面创建这个内部类的对象的话, 必须把这个内部类代码写在外部类的 public 里面
假设我们有一个类, 这个类仅仅是给我当前另一个类的成员用, 别的用不到, 这样我就可以在 private 里面定义一个内部类, 这就是内部类的意义
从封装的角度来说, 内部类挺好, 不必要的东西就对外隐藏
假如只有一个函数用这个类, 我们甚至可以把内部类定义到函数里面
class COutter
{
private:
int m_nOut;
public:
COutter();
COutter(int nOut);
class CInner
{
private:
int m_nIn;
public:
CInner();
CInner(int nIn);
void Fn();
};
};
COutter::COutter(){}
COutter::COutter(int nOut)
{
m_nOut = nOut;
}
COutter::CInner::CInner(){}
COutter::CInner::CInner(int nIn)
{
m_nIn = nIn;
}
COutter::CInner::Fn(){}
// 我们可以这样把声明和具体代码分开来写
// 唯一需要做的就是在内部类前面写上外部类的名字