我正在通过 GoF在线链接阅读一本关于设计模式的书。
在这本书的适配器模式中,在示例代码部分,我遇到了这个特定的代码:
class TextView {
public:
TextView();
void GetOrigin(Coord& x, Coord& y) const;
void GetExtent(Coord& width, Coord& height) const;
virtual bool IsEmpty() const;
};
此类TextView
由TextShape
以下方式私有继承:
class TextShape : public Shape, private TextView {
public:
TextShape();
virtual void BoundingBox(
Point& bottomLeft, Point& topRight
) const;
virtual bool IsEmpty() const;
virtual Manipulator* CreateManipulator() const;
};
然后在这个void TextShape::BoundingBox
函数中如下:
void TextShape::BoundingBox (
Point& bottomLeft, Point& topRight
) const {
Coord bottom, left, width, height;
GetOrigin(bottom, left); //How is this possible? these are privately inherited??
GetExtent(width, height); // from textView class??
bottomLeft = Point(bottom, left);
topRight = Point(bottom + height, left + width);
}
可以看到,函数GetExtent
&GetOrigin
被称为 TextShape,而TextView
包含这些函数的类是私有继承的。
我的理解是,在私有继承中,所有parent class
成员都变得不可访问,那么这个 ( void TextShape::BoundingBox()
) 函数是如何试图访问它的呢?
更新:
感谢大家的回答,我在阅读私有继承时陷入了错误的观念。我觉得,它甚至会阻止访问任何成员,而实际上它会更改访问说明符而不是可访问性。非常感谢你澄清:)