Я использую двойную отправку, чтобы получить расстояние между 2 объектами из 2 классов (B
, 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*/ }
Довольно пожалуйста с клубникой и вишней на вершине, формат кода в виде кода. – Angew
Это помогло бы людям, если бы вы описали, что вызывает бесконечный цикл (покажите, какой метод вы вызываете и как, например, какие аргументы). – TypeIA
'double A :: Distance (A * a) {return a-> Distance (this);}' выглядит подозрительно. – laune