所以情况如下:
我有一个用于光线追踪器程序的抽象超类“模型”,各种几何图形都从中继承属性和函数。显然,不会有模型类型的对象,但是会有一个模型类型的数组,其中将存储场景的整个几何图形。
然后光线追踪器会投射出许多光线。每条射线都将遍历这个模型数组,并使用自己的方法 Ray::intersect 检查它是否与它们发生碰撞。因此,Ray 的声明大致包括以下内容:
Point intersect(Sphere sphere) {...}
Point intersect(Cube cube) {...}
Point intersect(Torus torus) {...}
ETC
问题是,由于所有这些类都继承自 Model,并且数组的类型是 model,所以元素在被访问时将是 model 类型。模型没有相交,所以我不会像没有这样的方法错误那样得到错误的方法错误。所以问题是:如何将每个成员转换为适当的类型?
有没有一种合理的方法可以做到这一点,或者我必须尝试为每个对象显式地转换每个子类,并使用任何棒子?对于似乎是一个常见问题的问题,这似乎非常骇人听闻。