에서 파생 된 개체의 컬렉션을 처리하는 가장 좋은 방법은 무엇입니까. 이제 'BaseA'를 확장하여 추가 기능을 추가하고자하므로 'BaseA'에서 'DerivedA'를 파생시킵니다. 'DerivedA'의 한 가지 특징은 'ItemA'항목 대신보다 정교한 'DerivedITemA'항목을 처리해야한다는 것입니다.내가 클래스 항목 'ItemA'의 컬렉션을 포함 'BaseA을'이 상상 파생 클래스
class DerivedA : public BaseA {
vector<DerivedItemA> x;
void m2(int i) { x[i].m2(); }
};
즉 :
class BaseA {
protected:
vector<ItemA> x;
void m1(int i) { x.m1(i); }
};
class ItemA {
protected:
void m1(int i) { ... }
};
class DerivedItemA : public ItemA {
void m2(int i) { ... }
};
지금은 이런 종류의 일을 처리하고 싶습니다 내 Derived 클래스에서 파생 된 항목을 처리하도록합니다. x의 위 정의는 BaseA에있는 것과 충돌하기 때문에 올바르지 않습니다. 그러나 나는 ItemA 요소를 다룰 때 x를 처리하는 BaseA의 모든 메소드를 재사용 할 수 있기를 원하고 DerivedAtA 데이터 유형의 추가 복잡성을 처리하기 위해 DerivedA에서 확장 된 메소드를 가짐
제안 사항이 있으십니까? 내 생각은 x (VectorOfItemA 예를 들어)에 대한 새로운 데이터 유형을 정의하고 VectorOfDerivedItemA에서 파생 된 선에 있습니다. 좀 더 간단하고 나은 솔루션이 있는지 궁금합니다.
덕분에
"위의 x 정의는 BaseA에있는 정의와 충돌하므로 올바르지 않습니다." 아니, 파생 클래스의'x'는 기본 클래스의'x'를 숨 깁니다. 즉, 기본 클래스의 함수는 여전히 'BaseA :: x'에서 작동하지만 파생 클래스의 함수는 'DerivedA :: x'에서 작동합니다 (정규화되지 않은 -id를 사용). – dyp
어떻게 요소를 벡터에 추가합니까? –
의도 한 용도는 무엇입니까? 다형성 인'ItemA' 또는'DerivedItemA' 객체의 컬렉션 하나를 가지려면? 그렇다면 * 포인터 *를 개체 (이상적으로 스마트 포인터)에 저장해야하지만 원하는대로 정확히 표시되지는 않습니다. – WhozCraig