2011-03-03 2 views
1

데이터 세트에서 작업을 수행하기 위해 상호 교환 가능한 클래스 세트를 갖고 싶습니다. 나는 내가하려고하는 것이 다형성이라고 생각하지만 나는 확신 할 수 없다.다른 클래스에 반복적으로 액세스하려면 어떻게해야합니까?

이것은 내가하려는 일의 예입니다. 초기 값을 포함하는 객체를 생성 한 다음 다른 클래스를 초기화하여 첫 번째 클래스의 데이터를 사용하고 exec를 사용하여 작업을 수행 한 다음 다른 재귀 클래스를 사용하여이 작업을 반복합니다.

나는 작업 순서를 바꿀 수 있기를 원한다. 어떤 클래스라도 exec()를 호출하면 항상 부호없는 long을 반환 할 수있다. init()은 다를 수 있지만 초기화 중에 호출되며 재귀 클래스 내에서 액세스되지 않습니다.

감사합니다, 당신은 다음과 같은 디자인 패턴을 확인 할 수 있습니다처럼

class operationsObject { 
public: 
    virtual unsigned long exec (void) =0; 
}; 

class addObject: public operationsObject { 
private: 
    unsigned long valueA, valueB; 
public: 
    void init(unsigned long a, unsigned long b) 
    {valueA = a; valueB = b;} 
    unsigned long exec() 
    {return valueA + valueB;} 
}; 

class subtractObject: public operationsObject { 
private: 
    operationsObject *obj; 
    unsigned long valueA; 
public: 
    void init(unsigned long a, operationsObject *o) 
    {valueA = a; obj = o;} 
    unsigned long exec() 
    {return obj->exec() - valueA;} 
}; 

class multiplyObject: public operationsObject { 
private: 
    operationsObject *obj; 
    unsigned long valueA, valueB; 
public: 
    void init(unsigned long a, unsigned long b, operationsObject *o) 
    {valueA = a; valueB = b; obj = o;} 
    unsigned long exec() 
    {return obj->exec() * valueA * valueB;} 
}; 

int main(){ 
    operationsObject *op1 = new addObject; 
    operationsObject *op2 = new subtractObject; 
    operationsObject *op3 = new multiplyObject; 
    op1->init(4,5); 
    op2->init(4, op1); 
    op3->init(1, 2, op2); 
    unsigned retVal = op3->exec(); 
} 

답변

3

귀하의 설명을 소리 : Chain of Responsibility합니다. 아마 이런 식으로 뭔가에

올 것 :

  • 공공 방법

    • 명령 인터페이스/추상 기본 클래스 exec (가상이 아닌!)는
    • 보호 추상적 가상 메서드를 호출하는 execLocal은 찾고있는 비헤이비어를 구현합니다. 로

    이제 exec 정의 할 수 있습니다 : 내가 원래 그것을 구현하는 생각했지만,이 개념은 더 의미가 어떻게

    는 "정확히"이 사이트를 찾을 수 없습니다
  • +0

    def exec(param): self.execLocal(param) if self.hasNext(): self.next.exec(param) 
    http://sourcemaking.com/design_patterns/chain_of_responsibility/cpp/1 C에서 구현을 설명 + +, 아주 멋진 디자인 방법, 감사합니다 Logged – jeremyb

    관련 문제