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
为什么允许这种访问?
-
设计意图:内部类是外部类的“一部分”,逻辑上应享有对父类的完全访问权(类似成员函数的权限)。
-
封装性:内部类通常用于实现外部类的细节(如迭代器、私有工具类),因此需要紧密协作。