이중 디스패치를 사용하여 다른 클래스 (A)의 하위 클래스 인 2 클래스 (B
, C
)의 2 개 개체 사이의 거리를 구합니다. class A
의 메소드는 순수 가상이어야한다고 생각하지만 class A
은 인스턴스화 가능해야하므로 순수 가상으로 만들 수 없습니까?이중 디스패치 무한 루프
또 다른 한가지는 기본 클래스에서 Distance(A *a)
의 정의에서 무한 루프를 생성하기 때문에 좋은 방법으로 이중 디스패치를 사용하는지 잘 모르겠다는 것입니다. class C
에서
double B::Distance(A *a) { return a->DistanceB(this); }
double B::DistanceB(B *b) { /*calculate distance*/ }
double B::DistanceC(C *c) { return c->DistanceB(this); }
:
virtual double Distance(A *a) {return a->Distance(this);}
virtual double DistanceB(B *b) {return std::numeric_limits<double>::max();}
virtual double DistanceB(C *c) {return std::numeric_limits<double>::max();}
virtual double DistanceC(B *b) {return std::numeric_limits<double>::max();}
virtual double DistanceC(C *c) {return std::numeric_limits<double>::max();}
class B
에서 : 그래서 만약
double C::Distance(A *a) { return a->DistanceC(this); }
double C::DistanceB(B *b) { /*calculate distance*/ }
double C::DistanceC(C *c) { /*calculate distance*/ }
예쁜하시기 바랍니다 고정. – Angew
무한 루프를 유발하는 요소를 설명하면 사람들에게 도움이 될 것입니다. 어떤 메소드를 호출하고 어떻게 실행하는지, 즉 어떤 인수를 사용하는지 표시하십시오. – TypeIA
'double A :: 거리 (A * a) {돌아 가기 a-> 거리 (this);}'는 의심스러워 보입니다. – laune