not related by inheritance
auf demselben Zweig bedeuten würde ...
Sie sollten nicht verwechseln Werte Casting für Zeiger (oder umgekehrt) Gießen, sie sind verschiedene Arten Umwandlung.
Die int
zu float
eine Funktion verwendet, um einen Wert eines bestimmten Typs auf einen Wert des Zieltyps zu konvertieren (man beachte, dass diese Funktion explizit oder implizit sein kann, ist es implizit für diesen speziellen Fall, dh. Definiert in die Sprache). In C++ können Sie dies für benutzerdefinierte Klassentypen implementieren, indem Sie ein ctor für Klasse A implementieren, das einen Wert vom Typ B erhalten kann, oder einen Darstellungsoperator für Klasse B implementieren, der einen Wert vom Typ A zurückgibt.
Cake *
bis Cheese *
Werte nicht konvertieren, aber versucht, ein bestimmtes Objekt auf andere Weise anzuzeigen. Es ist Untertyp Polymorphismus (so müssen Sie dynamic_cast
verwenden). Angesichts Ihrer Typhierarchie kann ein Cheese-Objekt einfach als Food-Objekt betrachtet (nicht konvertiert) werden, indem ein Food-Pointer auf ein Cheese-Objekt zeigt (so wie man von verschiedenen Personen unterschiedlich betrachtet werden kann) oder der Arzt kann Sie ergreifen, während Sie immer die gleiche Person sind!) Es ist klar (zumindest in Ihrer Hierarchie), dass ein Käse nicht als ein Kuchen betrachtet werden kann, wenn es der Fall wäre, wie das Käseobjekt reagieren würde Kuchen spezifische Methoden? Sie sind ein Tier, ein Hund auch, aber es ist schwer vorstellbar, dass ich Sie als Hund sehen kann (Sie haben nicht 4 Beine, nicht wahr?)
Do not lassen Sie sich von Ihrem Fall täuschen.Ok, es scheint, dass der Inhalt von Cheese und Cake identisch ist, aber die gegebene Hierarchie sagt die Wahrheit: Es gibt nicht auf dem gleichen Zweig, Sie können nicht einen Cheese-Zeiger von einem Kuchen-Zeiger bekommen. Der C++ - Compiler schützt Sie davor.
Jetzt ändern sich die Dinge ein wenig, wenn Sie mehrfache Vererbung wie eine CheeseCake verwenden, die von Käse und Kuchen erbt. Wenn dann ein CheeseCake-Objekt durch einen Cheese-Zeiger angezeigt wird, ist es möglich, es in einen Kuchenzeiger umzuwandeln, da ein CheeseCake beides ist! Natürlich kann selbst in diesem Szenario mit mehrfacher Vererbung ein Cheese-Objekt nicht als Cake through pointers angesehen werden.
Aber es ist zweimal die Kalorien, weil die Vererbung nicht virtuell ist :( – Quentin
Ich möchte Cheescake nicht durch die Kombination der beiden machen; Ich möchte einen Käsekuchen ein '' Kuchen'' Objekt anstelle eines '' Käse nennen "Objekt. Ein bisschen ein verwirrendes Beispiel, erkenne ich rückblickend. – kmiklas