通过外部类的实例访问嵌套的内部类

时间:2014-09-25 20:54:49

标签: c++

说我有类似的东西

class Outer
{
public:
    static int m_Out;
    class Inner
    {
    public:
        static int m_In;
        void Display();
    };

};

int Outer::m_Out = 10;
int Outer::Inner::m_In = 25;

void Outer::Inner::Display()
{
    std::cout <<m_Out << std::endl;
}

int main()
{
    Outer objOut;
    Outer::Inner objIn;
    objouOut.Inner::m_in //Error
    std::cin.get();
}

为什么这不可能?这是否意味着我无法通过类Outer的实例访问类内部?我知道我可以用Outer :: Inner :: m_in抓住它但是我想知道在通过外部类的实例进行嵌套类访问时我的局限性是什么

2 个答案:

答案 0 :(得分:0)

这应该这样做

class Outer{
public:
    static int m_Out;
    class Inner
    {
    public:
        static int m_In;
        void Display();
    };

};

int Outer::m_Out = 10;
int Outer::Inner::m_In = 25;

void Outer::Inner::Display()
{
    std::cout << m_Out << std::endl;
}

int main(){
    Outer::Inner objIn;
    Outer::Inner::m_In;
        std::cin.get();
}

您无需执行Outer objOut;

答案 1 :(得分:0)

由于成员变量m_In被声明为static,因此它属于class Inner,而不属于class Inner的任何实例。

因此,下面的代码部分不是有效的C ++语法:

objOut.Inner::m_In;

要访问它,您应该输入:

Outer::Inner::m_In

此外,定义内部类并不意味着外部类的每个对象都将具有内部类的附加成员对象。内部类的定义是外部类定义范围内用户类型的定义。