다음과 같은 추상 클래스를 생각해 보자.동적 캐스트 또는 함수 오버로드
class Abstract {
public:
// ...
virtual bool operator==(const Abstract& rhs) const = 0;
// ...
};
이제이 추상 클래스에서 파생 클래스를 여러 개 생성한다고 가정 해 보겠습니다. 그러나 각 클래스는 자체 알고리즘 유형과 비교할 때 다른 알고리즘을 사용하고 다른 파생 클래스와 비교할 때는 일반 알고리즘을 사용합니다. 다음 두 가지 옵션 중에서 더 효율적이고 효율적인 옵션이 있습니까?
옵션 A :
class Derived : public Abstract {
public:
// ...
bool operator==(const Abstract& rhs) const {
// Code for comparing to any of the other derived classes
}
bool operator==(const Derived& rhs) const {
// Code for comparing to myself
}
// ...
};
옵션 B :
class Derived : public Abstract {
public:
// ...
bool operator==(const Abstract& rhs) const {
const Derived* tmp = dynamic_cast<const Derived*>(&rhs);
if (tmp) {
// Code for comparing to myself
}
else {
// Code for comparing to any of the other derived class
}
}
};
C++ typecasting이 나에게 상대적으로 신비로운 주제이기 때문에 이러한 옵션의 장점과 단점에 대해 궁금합니다. . 또한 어떤 솔루션이 더 "표준"이며 두 번째 솔루션이 성능에 어떤 영향을 미칩니 까?
아마도 세 번째 솔루션이 있습니까? 특히 파생 클래스가 많은 경우 각각 다른 파생 클래스에 대해 자체 비교 알고리즘이 필요합니까?
알겠습니다. 이 예제는 제가 수행 한 일종의 것입니다.비록 옵션 A가 내 특정 필요에 더 적합하다고 생각하지만, 객체가 올바른 유형이 아니더라도 사용할 알고리즘을 제어 할 수 있기를 원하기 때문에이 예제는 어떻게 할 수 있는지 정확하게 보여줍니다. 고맙습니다! – Zeenobit