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