3 Stimmen

Ist das nicht ein Abstieg?

Wenn ich das tue

double d = 34.56;
int i = (int)d;

Bin ich nicht "niedergeschlagen"?

OR

Wird dieser Begriff nur im Zusammenhang mit Klassen und Objekten verwendet?


Ich bin verwirrt, weil wir in diesem Fall von einer größeren Sache "herunterkommen". double auf ein kleineres int aber im Falle von Klassen, die wir von einer kleineren Klasse "abwärts" führen base class zu einer größeren derived class .

Sind diese beiden Konventionen nicht in gewissem Sinne gegensätzlich?

7voto

Andrey Punkte 57704

Downcasting ist der Vorgang des Werfens einer Referenz einer Basisklasse an eine der ihrer abgeleiteten Klassen.

http://en.wikipedia.org/wiki/Downcasting

Nein, Sie machen keinen Downcast, da double und int keine Klassen sind.

3voto

Daniel Bingham Punkte 11614

Nein, Sie sind nicht downcasting. Sie gießen nur, und Sie schneiden alles nach dem Komma ab.

Der Abwärtswurf gilt hier nicht. Die Primitive int y double sind in C++ keine Objekte und stehen nicht in der Weise in Beziehung zueinander, wie es zwei Objekte in einer Klassenhierarchie tun. Sie sind separate und primitive Einheiten.

Downcasting bezeichnet den Vorgang, bei dem ein Objekt in ein anderes, von ihm abgeleitetes Objekt gegossen wird. Es bezieht sich auf den Vorgang, sich von der Wurzel der Klassenhierarchie nach unten zu bewegen. Es hat nichts mit den Größen der fraglichen Typen zu tun.

0voto

Dave Johansen Punkte 849

int y double sind beide Primitive und keine Klassen, so dass die Konzepte von Klassen nicht auf sie zutreffen.

Ja, es ist eine Umwandlung von einem "größeren" in einen "kleineren" Typ (in Bezug auf die numerische Größe), aber es ist nur ein "Wurf" und kein "Abwurf".

0voto

Jerry Coffin Punkte 452852

Die beiden sind nicht so sehr gegensätzlich, sondern haben einfach nichts miteinander zu tun. Im Beispielsfall nehmen wir einen Wert eines Typs, und der "Cast" nimmt diesen Wert und erzeugt einen ähnlichen Wert eines Typs, der vage ähnlich, aber völlig unabhängig ist.

Bei der Durchquerung eines Vererbungsbaums mit etwas wie dynamic_cast Wenn wir einen Zeiger (oder Verweis) auf ein Objekt nehmen und zuvor beschlossen haben, ihn als Zeiger auf einen anderen Objekttyp zu behandeln, versuchen wir im Grunde, ihn wieder als (etwas, das dem ursprünglichen Objekttyp näher kommt) zu behandeln. Insbesondere sind wir jedoch pas Wir erstellen keinen neuen oder anderen Wert, sondern lediglich eine andere Ansicht desselben Wertes (d. h. desselben tatsächlichen Objekts).

-1voto

John Dibling Punkte 96619

Du wirfst nicht, du konvertierst. Das ist etwas ganz anderes.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X