书中内容似乎有一点问题

img


age,address在Undergraduate中是私有类型。被Graduate受保护继承,那Graduate不能直接访问age和address才对。但后面给出的解析却是正确。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答由chatgpt基于相关博客总结生成:

    问题解答:

    根据您的问题描述,Undergraduate类中的age和address是私有类型,而Graduate类是通过受保护继承方式继承自Undergraduate类。您提到在这种继承关系下,Graduate类可以直接访问age和address,您想知道为什么会出现这种情况。

    在受保护继承方式下,基类中的私有成员在派生类中是不可直接访问的。然而,在C++中,默认情况下,派生类会继承基类中的所有成员,不论是私有、受保护还是公有的。这意味着,虽然age和address在Undergraduate类中是私有的,但它们仍然会被Graduate类继承。

    被继承的age和address在Graduate类中仍然可以被访问的原因是,受保护继承方式下的派生类可以访问基类中的所有受保护成员。受保护成员在基类中对外部是不可访问的,但对于派生类及其派生类的成员函数来说是可以访问的。这就是为什么Graduate类可以直接访问age和address的原因。

    总结起来,虽然age和address在Undergraduate类中是私有的,但它们被Graduate类通过受保护继承方式继承了下来,使得Graduate类可以直接访问它们。

    希望以上解答对您有所帮助。如果您还有任何疑问,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

书上是对的
你可能看错了,age和address是Undergraduate类,不是Student类,本类的当然可以访问。