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

C++: How can I access a method of an inner class?

本文关键字:内部类 方法 访问 何访问 C++      更新时间:2023-10-16

我正在学习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

对于问题2,我想在myClass中创建一个myClass2类的对象,然后在myClass中创建另一个函数来访问method2函数。

我想知道是否还有其他出路,因为我的路似乎有点让人头疼。

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

2) 你需要实例化一个myClass::myClass2对象并调用它的成员。myClass2::Class2()是一个成员函数,所以它需要一个对象来操作。例如

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

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

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

因为CCD_ 21不是CCD_ 22的成员。它是myClass2的一个成员,您需要像使用myClass一样实例化它。

2) 是否有访问Class2函数的方法。

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