Я хочу использовать наследование, чтобы объект обрабатывался по-разному, в зависимости от того, где в иерархии он падает
( аналогично этому вопросу C # )
Предположим, что вы строите иерархию объектов Shape, например:
class Shape {} ;
class Sphere : public Shape {} ;
class Triangle : public Shape {} ; ...
Затем вы оборудуете класс Ray с помощью методов, таких как:
class Ray
{
Intersection intersects( const Sphere * s ) ;
Intersection intersects( const Triangle * t ) ;
};
. Вы храните массив различных типов Shape * иcall
vector<Shape*> shapes ; ...
//foreach shape..
Intersection int = ray.intersects( shapes[ i ] )
Но вы получаете ошибку компилятора
ошибка C2664: «Пересечение Ray :: intersects (const Sphere *) const»: невозможно преобразовать параметр 1 из «Shape * const» в'const Sphere *'
Что вы сделали не так?
Это единственный способ сделать это наоборот , с
class Shape
{
virtual Intersection intersects( const Ray* ray )=0 ;
} ;
тогда переопределение каждого класса пересекается?Затем звонит
//foreach shape..
Intersection int = shapes[i]->intersects( ray ) ;
Можете ли вы сделать это первым способом, который я показал или НИКОГДА?