我想使用繼承有不同的地方在層次結構中它屬於不同的方式處理的物體C++重載決議
假設你建立Shape對象的層次結構,如:
class Shape {} ;
class Sphere : public Shape {} ;
class Triangle : public Shape {} ; ...
你再裝備一個雷類等的方法:
class Ray
{
Intersection intersects(const Sphere * s) ;
Intersection intersects(const Triangle * t) ;
};
您存儲各種類型的各類形狀*的數組,並調用
vector<Shape*> shapes ; ...
//foreach shape..
Intersection int = ray.intersects(shapes[ i ])
但你的編譯器錯誤
錯誤C2664:「交集雷::相交(常量球*)常量」:不能將參數1從'Shape * const'轉換爲'const Sphere *'
你做錯了什麼?
是做其他周圍方式的必由之路,與
class Shape
{
virtual Intersection intersects(const Ray* ray)=0 ;
} ;
然後每一類覆蓋相交?然後撥打電話
//foreach shape..
Intersection int = shapes[i]->intersects(ray) ;
你可以做到這一點,我的第一種方式顯示或從不?
我認爲這是[multiple(double)dispatch](http://en.wikipedia.org/wiki/Multiple_dispatch)。 C++本身沒有它。 – 2011-06-11 16:08:53
[繼承並不總是對的。](http://en.wikipedia。org/wiki/Circle-ellipse_problem) – 2011-06-11 16:12:42