B
我正在使用双重调度来获取 2 个类 ( , )的 2 个对象之间的距离,C
它们是另一个 (A) 的子类。我认为其中的方法class A
应该是纯虚拟的,但是它们在其他地方的测试中使用,所以class A
必须是可实例化的,所以我不能让它们成为纯虚拟的,对吧?
另一件事是我不确定我是否以一种好的方式使用双重调度,因为有时会Distance(A *a)
在基类的定义中生成无限循环。
在中class A
,我有方法:
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 B::Distance(A *a) { return a->DistanceB(this); }
double B::DistanceB(B *b) { /*calculate distance*/ }
double B::DistanceC(C *c) { return c->DistanceB(this); }
在class C
:
double C::Distance(A *a) { return a->DistanceC(this); }
double C::DistanceB(B *b) { /*calculate distance*/ }
double C::DistanceC(C *c) { /*calculate distance*/ }