Вы можете использовать указатель (или ссылку):
class Derived;
class Base {
virtual Derived *f() = 0;
};
class Derived : public Base {
};
Но это кодовый запах для меня. Почему кому-либо, унаследовавшему этот класс, нужно знать о другом производном классе? На самом деле, почему базовый класс должен быть связан с его производным?
В вашей ситуации вы должны заметить вещи, которые могут свидетельствовать о плохом дизайне. Хотя имеет смысл, что ваш ограничивающий прямоугольник будет получен из Shape
, имейте в виду, поскольку Shape
имеет функцию, которая возвращает ограничивающий прямоугольник, ограничивающий прямоугольник будет иметь функцию, которая возвращает себя.
Я не уверен, что лучшее решение, но вы могли бы сделать BBox
отдельным классом в целом, и, возможно, дать ему функцию, похожую на: Shape *as_shape(void) const
, которая создала бы class Box : public Shape
с теми же измерениями, что и ограничительная коробка.
Я все еще чувствую, что есть лучший способ, но сейчас у меня нет времени, я уверен, что кто-то еще придумает лучшее решение.