C ++:如何访问内部类的方法?

时间:2015-02-21 15:18:28

标签: c++ function class inner-classes

我正在经历classes并考虑做嵌套类。所以我有下面的类声明。

class myClass {
    public:
        void method1() {
            cout << "This is method 1" << endl;
        }
        class myClass2 {
            void method2() {
                cout << "This is method 2" << endl;
            }
        };
};

正如您所看到的,myClass中有method2方法。下面的代码运行正常,并为我提供了所需的输出。

myClass obj;
obj.method1();

但是当我尝试这个时:

obj.method2();

我收到错误消息method2 is not a member of myClass

问题:

  1. 为什么我无法访问方法'method2 from objects of class myClass`?
  2. 有没有办法访问method2
  3. 对于问题2,我考虑在myClass2中创建类myClass的对象,然后在myClass中创建另一个函数来访问method2函数。

    我想知道是否还有其他出路,因为我的方式似乎有点痛苦。

2 个答案:

答案 0 :(得分:1)

1)因为Class2()不是myClass的成员。

2)您需要实例化myClass::myClass2对象并在其上调用成员。 myClass2::Class2()是一个成员函数,因此它需要一个对象来操作。例如

myClass::myClass2 obj;
obj.Class2();

请注意,这需要您使myClass2::Class2()成为公共成员。它在您的代码中是私有的。

答案 1 :(得分:1)

class2放在class1内的效果比你想象的要少。它只是把它放在class1的范围内。

所以,想象同样的事情但不嵌套:

class myClass
{
public:
    void Class1()
    {
        cout<<"This is Class 1"<<endl;
    }
};
class myClass2
{
public:
    void Class2()
    {
        cout<<"This is Class 2"<<endl;
    }
};

...

// and this should look normal to you:
myClass obj;
obj.Class1();

myClass2 obj2;
obj2.Class2();

现在将myClass2放在myClass范围内,就像你一样,看看最后几行如何变化。

class myClass
{
public:
    void Class1()
    {
      cout<<"This is Class 1"<<endl;
    }
    class myClass2
    {
    public:
        void Class2()
        {
            cout<<"This is Class 2"<<endl;
        }
    };
};

...

myClass obj;
obj.Class1();

myClass::myClass2 obj2;// this is the only thing that changes. You put myClass2 in a different scope.
obj2.Class2();

所以直接回答你的问题:

  

1)为什么我无法使用myClass obj访问函数Class2。

因为Class2不是myClass的成员。它是myClass2的成员,您需要像对myClass一样进行实例化。

  

2)有没有办法访问Class2功能。

是的,通过实例化myClass2,就像在我的示例末尾:myClass::myClass2 obj2; obj2.Class2();