标识符protected 与 private类似,它们的唯一区别在继承时才表现出来。当定义一个子类的时候,基类的protected 成员可以被子类的其它成员所使用,然而private 成员就不可以。因为我们希望CPolygon的成员width 和 height能够被子类CRectangle 和 CTriangle 的成员所访问,而不只是被CPolygon自身的成员操作,我们使用了protected 访问权限,而不是 private。 下表按照谁能访问总结了不同访问权限类型:
在我们的例子中,CRectangle 和CTriangle 继承的成员与基类CPolygon拥有同样的访问限制: CPolygon::width // protected access CRectangle::width // protected access CPolygon::set_values() // public access CRectangle::set_values() // public access 这是因为我们在继承的时候使用的是public,记得我们用的是: class CRectangle: public CPolygon; 这里关键字 public 表示新的类(CRectangle)从基类(CPolygon)所继承的成员必须获得最低程度保护。这种被继承成员的访问限制的最低程度可以通过使用 protected 或 private而不是public来改变。例如,daughter 是mother 的一个子类,我们可以这样定义: class daughter: protected mother; 这将使得protected 成为daughter 从mother处继承的成员的最低访问限制。也就是说,原来mother 中的所有public 成员到daughter 中将会成为protected 成员,这是它们能够被继承的最低访问限制。当然这并不是限制daughter 不能有它自己的public 成员。最低访问权限限制只是建立在从mother中 继承的成员上的。 最常用的继承限制除了public 外就是private ,它被用来将基类完全封装起来,因为在这种情况下,除了子类自身外,其它任何程序都不能访问那些从基类继承而来的成员。不过大多数情况下继承都是使用public的。 |