C++:从嵌套类(在派生类中)访问基类成员

C++: Access base class member from a nested class (in the derived class)

提问人:ThomasAlvaEdison 提问时间:10/3/2022 更新时间:10/3/2022 访问量:277

问:

我目前有以下问题(简单的问题)。 我想从嵌套类访问基类的公共成员。显然它不那么容易工作...... 这里的正确解决方案是什么?

我是否必须将 *this 传递给派生类中的嵌套类?

谢谢你的思考!

#include <iostream>

class base
{
public:
    virtual void update() = 0;
    void drawCircle(const int& num) const { std::cout << "Base Clase: Circle " << num << " completed..." << std::endl; };
private:
};

class derived : public base
{
public:
    class nestedClass
    {
    public:
        void drawSomeCircle() const {
            drawCircle(1);  // does not work!
            drawCircle(2);  // does not work!
            drawCircle(3);  // does not work!
        }
    private:
    };

    void update() override
    {
        // make some graphic stuff
        myInnerNestedClass.drawSomeCircle();

        // access base class member drawCircle from here --> is working
        drawCircle(4);
    }
    nestedClass myInnerNestedClass;

private:
};

int main()
{
    derived oneDerivedClass;
    oneDerivedClass.update();
    return 0;
}
C++ 套基数

评论

2赞 TheUndeadFish 10/3/2022
nestedClass除了在某些情况下需要命名它之外,没有特殊关系(很像命名空间)。因此,如果您的情况的可能答案是相同的答案,如果没有嵌套并且您的程序中有任何其他类。derivedderived::nestedClassnestedClass
2赞 quetzalcoatl 10/3/2022
是的,基本上嵌套类是一个完全独立的类,就像任何其他单独的类一样,只是可以看到外部类的成员。如果你了解 Java,那么它就不像在 Java 中那样,在 Java 中,嵌套类的每个实例都有一个外部类实例的魔术句柄,并且你不能在没有外部对象的情况下创建嵌套类实例。在 C++ 中,嵌套类的行为类似于 Java 中的嵌套类。protected/privatestatic
0赞 Sam Varshavchik 10/3/2022
这里的解决方案是忘记类在 Java(或 C#)中是如何工作的。它们在 C++ 中不是这样工作的。
0赞 user17732522 10/3/2022
你应该重新考虑你的设计。为什么您尝试使用嵌套类作为外部类的成员,为什么嵌套类需要访问外部类的成员函数?使它们相互依赖并相互指向本身会带来一堆问题,如果它们只能成对存在,那么为什么它们是单独的类?
0赞 quetzalcoatl 10/3/2022
@SamVarshavchik在这种情况下,在 C# 中,它们的工作方式相同。fested 类的实例是分开的。只有 Java 才有这个神奇的内置指针。OuterClass.this

答:

1赞 iammilind 10/3/2022 #1

我是否必须传递到派生类中的嵌套类?*this

是的。 不知道属于谁,除非它在全局或外部范围内。nestedClassdrawCircle(const int&)namespace

一旦你把一个对象传递给 ,它甚至可以访问它的成员。*thisderivednestedClassprivate