저는 C++을 처음 사용하고 있으며 작업중인 특정 프로젝트에 다형성을 사용하는 방법을 알아 냈습니다.C++ 추상 기본 클래스를 사용하여 다형성을 달성하기 위해 객체 재사용
구성 요소 목록이 있습니다. 각 구성 요소에는 논리를 사용하여 계산 된 점수가 있습니다. 이 추상 기본 클래스에서
class Component {
public:
int compute_score(request *r) =0;
int get_score() { return score; }
protected:
int score;
};
이제 모든 구성 요소 상속 구성 요소 점수를 계산하기 위해 자신의 논리를 구현하기 : 그래서 추상 클래스가 있습니다. 그리고 마지막 알고리즘은 모든 컴포넌트 점수를 결합하는 것입니다.
// Compute and combine scores
for (int ndx = 0; ndx < num_components; ndx++) {
total += components[ndx]->compute_score();
}
combined_score = total/num_components;
이제이 모델을 기존 코드 기반에 맞추려고합니다. 이 Component 객체를 추가하고 점수를 계산하려는 request라는 큰 구조체가 있습니다. 구성 요소 배열을 사용하는
struct request {
...
Component *components[num_components];
...
};
void serve(request *r) {
...
// Compute and combine scores
for (int ndx = 0; ndx < num_components; ndx++) {
total += components->compute_score();
}
combined_score = total/num_components;
...
}
// Listener
void start(request *r) {
// Listen for request
// Serve the request
serve(&r);
// Clear the request struct for reuse
memset(r, 0, sizeof(request));
}
int main() {
// Created only once and then reused
request *req = (request*) calloc(1, sizeof(calloc));
start(&req);
}
가능성 :
) (제공하는 전화를 동적으로 요청이 들어 오면마다 할당 된 메모리 무료이 접근하는 동안 동적으로 컴포넌트 서브 클래스 객체를 생성합니다. 모든 요청마다 객체가 생성되고 성능이 저하 될 수 있습니다 (할당 & 할당). 메모리 조각화가 발생할 수 있습니다.
요청 개체 내에 구성 요소 하위 클래스 개체를 정적으로 만들고 구성 요소 배열에 대한 해당 참조를 가리 키십시오. 이것이 좋은 생각인지는 모르겠지만 동일한 객체를 재사용하여 문제를 해결합니다. 그리고 간단하고 우아한 방법으로 이것을 달성하는 방법을 모르겠습니다. 어떤 제안이라도 도움이 될 것입니다.
감사
"먼저 구성 요소 목록이 있습니다"라고 말한 다음 나중에 사용하려면 하위 클래스 개체를 만들어야한다고 말합니다. 필자의 이해를 돕기 위해 배열의 포인터는 기존 구성 요소 (어느 시점에서 어떤 방식 으로든 만들어 졌음)를 가리 킵니다. 나에게 상황이 무엇인지는 분명하지 않다. 즉, 컴포넌트를 색인화하고 요청을 전달하기를 원할 것입니다. 나는. ('components [ndx] -> compute_score (r)'). –
모든 구성 요소 개체를 한 번만 만들고 모든 요청에 대해 동일한 항목을 다시 사용하고 싶습니다. 모든 개체가 같은 구조체에 있으면이 개체를 가리키는 포인터를 배열에 만드는 좋은 방법이 있습니까? – mariner