问题解答:
根据您的问题描述,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类,本类的当然可以访问。