클래스 매개 변수가 있습니다.이 매개 변수는 특정 매개 변수가 보유 할 수있는 가능한 값 (GetNumValues () 및 GetValue (int index)의 두 가지 주요 메서드를 구현할 수 있음)을 나타 내기위한 것입니다.상속 한 클래스의 오브젝트 작성 중?
종종 하나의 논리적 매개 변수 (매개 변수 값은 비트 플래그)는 Parameter 클래스의 2 개 이상의 인스턴스로 표현하는 것이 가장 좋습니다 (예 : 1 또는 2가 될 수있는 매개 변수, 4 또는 8이 될 수있는 매개 변수, 하나의 매개 변수는 5, 6, 9 또는 10이 될 수 있음). 이를 처리하기 위해 매개 변수를 포함하는 CompositeParameter 클래스를 만들고 매개 변수의 조합에 따라 GetNumValues () 및 GetValue() 함수를 구현합니다.
그리고 CompositeParameter가 매개 변수를 하나의 단일 매개 변수로 사용하도록 조합하기 때문에 "CompositeParameter는 매개 변수"관계가 적합합니다. 그래서 저는 상속받은 클래스의 객체를 구성하는 클래스가있는 상황에 처하게됩니다.이 클래스는 옳은 것처럼 보입니다. 그러나 동시에 높은 수준의 코드가 CompositeParameters 및 Parameters를 정확히 동일하게 처리해서는 안되는 이유를 알 수 없습니다.
제가 생각할 수있는 유일한 방법은 CompositeParameter에 매개 변수를 간단하게 작성하는 것입니다. 상위 레벨 코드는 CompositeParameters 만 처리합니다. 그러나 이것은 다소 낭비 적이기 때문에 일반적으로 하나의 매개 변수 만 포함하는 CompositeParameters가됩니다.
생각하십니까?
class Parameter
{
public:
virtual unsigned int GetNumValues() const {...}
virtual unsigned int GetValue(unsigned int index) const {...}
}
class CompositeParameter : public Parameter
{
public:
// product of GetNumValues() of each item in mParamList
virtual unsigned int GetNumValues() const {...}
// allow all the possible combinations of the items in mParamList to be
// treated as one parameter. i.e. if mNumParams = 2, this would be analogous
// to getting the row and col index of a matrix from index, and combining
// the mParamList[0]->GetValue(row) and mParamList[1]->GetValue(col)
virtual unsigned int GetValue(unsigned int index) const {...}
private:
static const unsigned int MAX_PARAMS = 10;
unsigned int mNumParams;
const Parameter* mParamList[MAX_PARAMS];
}
C++ 코드에 대해 이야기 할 때 영어가 아닌 C++ 코드를 사용하여 문제를 설명하는 것이 거의 항상 좋습니다. –