Я пытаюсь найти хорошее решение наследования в C ++.
У меня есть класс Rectangle и класс Square. Класс Square не может публично наследовать от Rectangle, потому что он не может полностью выполнить требования прямоугольника. Например, прямоугольник может иметь ширину и высоту, каждый из которых устанавливается отдельно, и это, конечно, невозможно с квадратом.
Итак, моя дилемма. Очевидно, Square будет делиться большим количеством кода с Rectangle; они очень похожи.
Например, если у меня есть такая функция:
bool IsPointInRectangle(const Rectangle& rect);
это должно работать и для квадрата. На самом деле, у меня есть тонна таких функций.
Таким образом, при создании класса Square я решил использовать частное наследование с общедоступным оператором преобразования Rectangle. Итак, мой квадратный класс выглядит так:
class Square : private Rectangle
{
public:
operator const Rectangle&() const;
};
Однако, когда я пытаюсь передать Square в функцию IsPointInRectangle, мой компилятор просто жалуется, что «Rectangle является недоступной базой» в этом контексте. Я ожидаю, что он заметит оператор Rectangle и использует его вместо этого.
Возможно ли то, что я пытаюсь сделать?
Если это не сработает, я, вероятно, собираюсь преобразовать часть Rectangle в MutableRectangle class.
Спасибо.