基本上我有一个名为 的基类Geometry
,以及一些派生类,例如Point
,Polygon
等...
Geometry
实现这样的方法交集:
Geometry* intersection(Geometry* other)
{
Geometry* inter = compute_intersection(this, other);
if (inter is a polygon)
return new Polygon(inter);
if (inter is a point)
return new Point(inter);
}
当我在我的程序中计算两个几何图形的交集时,我得到 aGeometry*
并且我可以dynamic_cast
将它变成任何它真正的样子。
这是一个好的设计吗?我认为,可能错误的是,每次计算交集时我都必须检查真实类型,然后 dynamic_cast 结果(这可能很慢)。但我认为主要问题是这种设计,Geometry
必须知道它的导数(点,折线?等......)。
有什么好的解决方案可以避免这些问题?