【问题标题】:Accessing a nested inner class through instance of outer class通过外部类的实例访问嵌套的内部类
【发布时间】:2014-09-25 20:54:48
【问题描述】:

说我有这样的事情

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 来获取它,但我想知道在通过外部类的实例访问嵌套类时我的限制是什么

【问题讨论】:

  • @这完全有道理。

标签: c++


【解决方案1】:

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

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

objOut.Inner::m_In;

为了访问它,您应该输入:

Outer::Inner::m_In

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

【讨论】:

  • 请写下内部类是一种类型的注释,以便我可以将其标记为答案。这最初是作为评论发布的,但被删除了。此声明为我清除了一切,希望对其他人也有帮助。也感谢您的详细回答
【解决方案2】:

应该这样做

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;

【讨论】:

  • 我知道如何访问它。我想知道原因。请在答案中写下内部类是一种类型的评论。这清除了一切
  • 抱歉评论迟到了 lol 正在观看 youtube 上的视频。 @40two 几乎为您总结了。
猜你喜欢
  • 2014-02-11
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多