Я изучаю книгу «Шаблоны проектирования» от 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()
) пытается получить к ней доступ?
UPDATE:
Спасибо всем, что ответили, я ошибся, читая о частном наследовании. Я чувствовал, что это даже предотвратило бы доступ к любому из участников, тогда как фактически это изменяет спецификаторы доступа, а не доступность. Спасибо большое за разъяснения:)