2014-10-15 3 views
0

저는 C++ 프로그래밍을 처음 사용하고 있으며 상속에 대해 배우고 싶습니다. 나는 상속으로 자신을 연습 할 소프트웨어를 만들고 있는데, 이것이 좋은 디자인인지 알고 싶습니다. 여기에 내가 몇 가지 코드 및 각 루프를 통해 루프가이상위 클래스의 C++ 호출 하위 함수

class World{ 
public: 
    vector<WorldObject> WorldObjectCollection; 
} 

같은 객체 세계를

enum ObjectType{MovingObj, StaticObj}; 

class WorldObject{ 
public: 
    vector<double> Position; 
    WorldObject(ObjectType Type); 
}; 

class MovingObject : public WorldObject { 
public: 
    double Speed(); 
    MovingObject(): WorldObject(MovingObj){} 
}; 

class StaticObject: public WorldObject { 
public: 
    MovingObject(): WorldObject(StaticObj){} 
}; 

내 프로그램의 추출물이다, 나는 이동 물체의 때문에 속도를 업데이트해야 나는 움직이는 객체와 정적 인 객체 사이의 충돌을 검사 할 필요가있다. 나는 모든 객체를 동일한 벡터에 넣는 것이 바람직하다.

WorldType을 ObjectType의 스위치에있는 MovingObject 기반에 static_cast하는 것이 좋습니다.

더 좋은 방법이 있습니까? 가상 Speed ​​() 함수를 생성해야합니까?

감사

답변

1

당신이해야 문제는 WorldObjectCollection 벡터 기반 객체의 벡터 것입니다. StaticObjectMovingObject을 벡터에 넣으면 slice이되어 WorldObject 부분 만 저장됩니다. 따라서 static_cast은 전혀 작동하지 않습니다.

실행할 수있는 방법은 세계에 vector<WorldObject*>이있는 것입니다. 열거 형을 사용하면 효과가 있지만, 다형성을 사용한 접근 방식은 직접 조작하고 유지 관리하는 것이 더 쉽습니다. 예를 들어, 당신이 성장하고 진화함에 따라 새로운 종류의 객체를 추가하는 것이 훨씬 쉽습니다.

+2

이상,'vector >' –

관련 문제