데이터 세트에서 작업을 수행하기 위해 상호 교환 가능한 클래스 세트를 갖고 싶습니다. 나는 내가하려고하는 것이 다형성이라고 생각하지만 나는 확신 할 수 없다.다른 클래스에 반복적으로 액세스하려면 어떻게해야합니까?
이것은 내가하려는 일의 예입니다. 초기 값을 포함하는 객체를 생성 한 다음 다른 클래스를 초기화하여 첫 번째 클래스의 데이터를 사용하고 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();
}