빠른 정렬 알고리즘을 구현 중입니다. 나는 인터페이스를인터페이스 자체가 매개 변수로 사용되는 C++ 순수 가상 메서드
class Comparable{
public:
virtual int compareTo(Comparable *c)=0;
};
이 지금은 Comparable를 구현 ComparableInt라는 클래스가이 그것을 할 올바른 방법입니다,
class ComparableInt: public algorithm::Comparable{
public:
int value;
int compareTo(Comparable *i) {
ComparableInt *c = dynamic_cast<ComparableInt*>(i);
return value - (*c).value;
};
ComparableInt(int i):value(i){};
};
내 질문이 있습니까? 나는 이런 식으로 구현하려고했다 :
class ComparableInt: public algorithm::Comparable{
public:
int value;
int compareTo(ComparableInt *i) {
return value - (*i).value;
};
ComparableInt(int i):value(i){};
};
하지만이 INT은 compareTo (ComparableInt은 * 내가) 가상 INT은 compareTo (Comparable를 *의 C)에 대한 실현하는 것이 아닌 것 같다, 그래서 동적 캐스팅을 할 필요가 . 당신의 친절한 도움을 구하는!
방법 "STL의 정신"는 퀵의 모든 호출 대상을 단지 두 개의 요소를 호출하는 것입니다 수행합니다. – chris
상속을 사용하여 분류를 구현하는 이유는 무엇입니까? 템플릿과 표준 라이브러리를 사용하여이를 수행하는 방법에 대한 아이디어는 [here] (http://stackoverflow.com/questions/24650626/how-to-implement-classic-sorting-algorithms-in-modern-c)에서 확인하십시오. 알고리즘. – Praetorian
이 디자인의 문제점은 실제로 서로 비교할 수있는 것들을 비교하고 있다는 것을 실제로 제어 할 수 없다는 것입니다. 그들은 실제로 동일한 파생 형식을 가져야하며 동일한 인터페이스 유형이 아니어야합니다. – jxh