나는 어려움을 겪고있는 문제에 대해 질문이 있습니다. 당신이 나와 함께 견딜 수 있기를 바랍니다.디자인에 관한 질문 (상속, 다형성)
상상해 보겠습니다. 실제 객체의 계층 구조의 기본 클래스를 나타내는 Object 클래스가 있다고 가정 해보십시오. 나중에 그것으로부터 상속 받아 Object1D, Object2D 및 Object3D 클래스를 만듭니다. 이러한 파생 클래스 각각에는 몇 가지 특정 메서드와 특성이 있습니다. 예를 들어, 3d 객체는 렌더러가 사용할 3D 모델을 다운로드하는 기능을 가질 수 있습니다. 이 유사한에서 :-) 를 렌더링,
class Object {};
class Object1D : public Object { Point mPos; };
class Object2D : public Object { ... };
class Object3D : public Object { Model mModel; };
이제 단순히 아니라 인수로 객체를 받아 렌더러라는 별도의 클래스를 가질 것 :
그래서 나는이 같은이있을 것이다 그런데 여러 종류의 렌더러를 지원하고 싶습니다. 예를 들어, 나는 모든 객체는 객체의 어떤 종류의 다른 특정 렌더러에 의존하고 제공 할 수있는 기본 일 수 :
class Renderer {}; // Default one
class Renderer3D : public Renderer {};
을 그리고 여기 내 문제는 온다. 렌더러 클래스는 Object를 인수로 가져와야합니다. 예를 들어 생성자에서 객체를 렌더링하는 데 필요한 데이터를 가져와야합니다.
지금까지 그렇게 좋았습니다. 그러나 Renderer3D는 기본 속성뿐만 아니라 3D 객체의 특정 속성을 얻기 위해 Object3D 인수를 가져와야합니다.
생성자는 다음과 같이 보일 것이다 :
이제CRenderer(Object& object);
CRenderer3D(Object3D& object);
어떻게 일반적인 방법이 지정합니까? 아니면 더 나은 방법은 이것을 디자인하는 것입니까?
나는 RTTI 나 비슷한 것에 의지 할 수 있다는 것을 알고 있지만 가능한 한 이것을 피하고 싶습니다. 아마도 이것을 해결할 더 좋은 방법이있을 것입니다. 사전에
감사합니다!
도움을 주셔서 감사합니다. 정말 감사 드리며 지난 몇 시간을 다시 생각해 보았습니다. 각 답변마다 내 의견을 보아주십시오. – Dan
"Object"와 다른 이름을 사용하고자 할 수 있습니다. –