2012-07-01 6 views
0

가능한 중복 :
Learning C++: polymorphism and slicing
Array of polymorphic base class objects initialized with child class objectsC++ - 기본 클래스의 객체 지향 배열

나는 내 OpenGL을 응용 프로그램에 통합 객체 지향 클래스를했습니다. 기본 클래스에는 Tick이라는 함수가 있으며이 함수는 델타 시간을 나타내는 매개 변수와 함께 모든 틱 (눈금)을 호출해야합니다. 여기에 어떻게 보입니까 (이 질문과 관련이없는 것없이).

헤더 :

class Object 
{ 
public: 
    virtual void Tick(float DeltaTime); 
} 
class Controller : public Object 
{ 
public: 
    virtual void Tick(float DeltaTime); 
} 

은 그 때 나는 메인 루프, 초기화 및 폐기 (창 생성에서 분리하기)를 포함 Engine라는 클래스가 있습니다. 나는 게임에있는 모든 개체를 추적 할 필요가있는 클래스에서
, 그래서 나는 배열 생성 :

for (unsigned int c = 0; c < 10; c++) 
    Objects[c].Tick(delta); 

:
Object* Objects = new Object[10]; // for now max 10 objects

그럼 난 배열 물마루 반복 틱 함수를 호출을 루프 앞에 계산 된 delta입니다.

배열의 객체 중 하나를 Controller (예 :)에 지정하면 호출 된 Tick 함수는 항상 Object에 있고 실제로 저장된 클래스가 아닌 것입니다.

나는 타입 캐스팅을 시도했다. (각 클래스는 타입을 식별하는 문자열을 가지고있다.) 아무런 쓸모가 없다.

나는 그 대답이 (나의 마지막 질문에 대한 답과 같은) 명백한 것이지만, 그 답을 찾을 수는 없다.

감사합니다. :)

답변

5

slicing problem이 발생했습니다.

해결책은 배열에서 값으로 다형성 객체를 저장하지 않는 것입니다. 대신 (스마트) 포인터를 사용하십시오.

+0

키워드 분할을 알면 고맙습니다. 쉽게 답변을 찾을 수 있었을 것입니다. 그래서 'Object' 타입의 포인터 배열을 사용하여 문제가 해결되었습니다. (다시 한번 간단한 대답입니다) – zeluisping