Ich versuche static_cast in Bezug auf Upcasting (Kind zu Eltern) zu verstehen. Es ergibt keinen Sinn für mich. Ich muss ein Kind zu einem Elternteil werfen und es demonstrieren. Wenn ich mir Code online anschaue und Bücher referenziere, ist das was ich habe.Demonstration static_cast und Zweck davon?
Mustang *myMustang = new Mustang;
Car *myCar = new Car;
myMustang = static_cast<Mustang*>(myCar);
Aber offen gesagt, es zeigt nichts. Ich habe keine Bestätigung, dass es sogar gegossen hat. Ich habe versucht, der Car-Klasse eine öffentliche Funktion hinzuzufügen und sie vom Kind aus anzurufen, aber ... es ist offensichtlich vererbt.
Dies bedeutet auch, ich sehe derzeit keinen Zweck in dieser Art von Upcasting.
Meine Frage ist, wie verifiziere ich das sogar gegossen und was ist der Zweck dieser Eingabe von Casting?
update: Die Antworten waren ein bisschen schwer zu folgen aufgrund der Tatsache, dass ich keine Erfahrung mit dieser Art von Casting habe und virtuelle Funktionen sind eine vage Erinnerung. Mein Freund konnte mir helfen. Unten ist der Code für den Fall, dass jemand das gleiche Problem hat.
class Car {
public:
virtual void Greeting() { cout << "I am a car." << endl; };
};
class Focus : public Car{
public:
void FocusGreeting() { cout << "Hello, I am a Ford Focus." << endl; }
};
class Mustang : public Car {
public:
virtual void Greeting() override { cout << "I am a Ford Mustang." << endl; }
};
// in main
Mustang* myMustang = new Mustang;
Car *myCar = new Car;
myCar->Greeting();
cout << "Now ";
myCar = static_cast<Car*>(myMustang);
myCar->Greeting();
es sei denn, 'Mustang' eine Klasse Basis ist von 'Car', dies ist ein undefiniertes Verhalten –
Sie sind downcasting, nicht upcasting. –
Versuchen Sie auch, virtuelle Funktionen zu verwenden, die von Derivattypen überschrieben werden können. –