C++ 内部类(嵌套类)是可以访问外部类的私有保护成员的

class IModify
{
public:
   virtual void Modify(int a) = 0;
};

class Dog
{
public:
    void ShowAge()
    {
        cout << m_age << '\n';
    }
    class Cat;
private:
    int m_age{ 100 };
};

class Dog::Cat :public IModify
{
public:
    Cat(Dog *d):m_age(d->m_age){}
    void Modify(int a) override;
private:
    int &m_age;
};

void Dog::Cat::Modify(int a)
{
    m_age = a;
}
 

int main()
{
    Dog d;
    d.ShowAge();

    Dog::Cat c(&d);
    c.Modify(123);
    d.ShowAge();

    system("pause");
    return EXIT_SUCCESS;
}

输出:

100
123

为什么允许这种访问?

  • 设计意图:内部类是外部类的“一部分”,逻辑上应享有对父类的完全访问权(类似成员函数的权限)。

  • 封装性:内部类通常用于实现外部类的细节(如迭代器、私有工具类),因此需要紧密协作。

posted @ 2025-04-26 00:15  double64  阅读(19)  评论(0)    收藏  举报