Angenommen, wir haben eine abstrakte Klasse Vehicle
genannt:virtuelle Methode überschreibt in C++
class Vehicle {
virtual bool raceWith(Vehicle *anotherVehicle) = 0;
};
Und wir haben seine Subklassen Bicycle
und Car
:
// forward declaration
class Car;
class Bicycle : public Vehicle {
virtual bool raceWith(Vehicle *anotherVehicle) {
throw SomeExceptionClass();
}
virtual bool raceWith(Car *anotherVehicle) {
return true;
}
virtual bool raceWith(Bicycle *anotherVehicle) {
return false;
}
};
Doch dieser Code-Block wirft SomeExceptionClass:
Was zu tun er Re? Ermöglicht C++ nicht, polymorphe Methoden auf diese Weise zu verwenden?
Jede Hilfe wird geschätzt. Vielen Dank.
EDIT: Es wird auch gut sein, eine Antwort mit dynamic_cast<>
und decltype
Varianten zur Verfügung stellen?
Was ist Doppelversand? – Leviathlon
@Leviathlon double virtual dispatching ist die Fähigkeit, die korrekte Implementierung abhängig vom dynamischen Typ von ** two ** -Objekten aufzurufen. C++ bietet nur ein einziges virtuelles Dispatching auf "this". Was flatmouse hier beschreibt, ist als Visitor-Muster bekannt und verwendet zweimaliges Dispatching, um eine doppelte Disposition zu erreichen. – Quentin
Dies löste das Problem. So eine großartige Antwort. Vielen Dank für die Aufmerksamkeit. – Leviathlon