когда может потребоваться менять определения виртуальных функций базового класса:
float divi = static_cast<float>(a) / b;
Вот правильный вариант
https://godbolt.org/z/YEje6Y11Y
friend double operator+(Car& c1, Car& c2); , если её функциональность реализуется с помощью оператора приведения?