17_内部类

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(){}
// 我们可以这样把声明和具体代码分开来写
// 唯一需要做的就是在内部类前面写上外部类的名字