여기 상황은 다음과 같습니다.C++에서 오버로드 된 함수에 대한 하위 클래스로 캐스팅 했습니까?
나는 다양한 종류의 지오메트리가 속성과 기능을 상속하는 광선 추적 프로그램을위한 추상 수퍼 클래스 "모델"을 가지고 있습니다. 분명히 유형 모델의 객체는 없지만 장면의 전체 형상이 저장되는 유형 모델의 배열이 있습니다.
그러면 레이 트레이서가 여러 가지 광선을 투사합니다. 각 광선은이 배열을 반복하여 Ray :: intersect라는 자체 메서드를 사용하여 충돌하는지 확인합니다. 따라서, 레이의 선언은 약이 포함
Point intersect(Sphere sphere) {...}
Point intersect(Cube cube) {...}
Point intersect(Torus torus) {...}
등
문제는 이러한 클래스의 모든 모델에서 상속 및 배열 형 모델이기 때문에, 요소는이 때 타입 모델이 될 것입니다 액세스되었습니다. 모델에 교차점이 없으므로 잘못된 방법 오류가 발생하지 않습니다. 문제는 다음과 같습니다. 어떻게 각 구성원을 적절한 유형으로 캐스팅 할 수 있습니까?
합리적인 방법이 있습니까, 또는 각 개체에 대해 명시 적으로 각 하위 클래스를 캐스팅하고 모든 막대기를 사용해야합니까? 이것은 공통적 인 문제처럼 보이는 것에 매우 익숙해 보입니다.
'Base'에서 상속받은'Derived' 클래스가 있다면'Base :: Foo()'를 할 수없는 이유는 무엇입니까? –
오버로드 된 메서드는 수퍼 유형 모델의 개체를 사용하는 다른 클래스 용 메서드입니다. bar, baz, biff가 모두 어리석은 b 단어를 상속하는 다양한 foo (bar [name]), foo (baz [name]), foo (biff [name]) 등의 여러 기능이 있습니다. 추상 수퍼 클래스. –
이것은 고전적인 "이중 발송"또는 "다중 발송"시나리오입니다. 그것은 문헌에 잘 기록되어 있습니다. –