implizit cast od Is-A-Beziehung



  • class Base
    {
      virtual ~Base(){}
    };
    
    class Derived : public Base
    {
    
    };
    
    int main()
    {
      Base* pb = new Derived; //ist es implizit cast?
    }
    

    od. hat es überhaupt nichts mit implizit cast zu tun



  • Ein Cast ist was ganz anderes...

    Ein Cast sagt dem Compiler, das er eine Variable anders behandeln/anschauen soll...

    Wikipedia schrieb:

    Explizite Typumwandlungen [Bearbeiten]

    Eine explizite Typumwandlung wird im Programmcode angegeben. Eine explizite Typumwandlung bezeichnet man auch als Cast (aus dem Englischen).

    Das folgende Beispielprogramm ist in Java verfasst:

    int i = 100;
    byte b = (byte) i;

    Dabei handelte es sich bei der Angabe (byte) um die explizite Typumwandlungsoperation ("Cast").

    Je nach Typisierung der verwendeten Programmiersprache kann das Fehlen der expliziten Angabe der Typumwandlung einen Fehler zur Übersetzungszeit oder zur Laufzeit zur Folge haben.

    Eine Variante expliziter Typumwandlung ist die Verwendung eigens dafür geschriebener Funktionen:

    int i = 100;
    byte b = int2byte( i );

    Funktionen analog zu int2byte() werden insbesondere in Programmiersprachen verwendet, die keine Operatoren dafür besitzen.

    Implizite Typumwandlungen [Bearbeiten]

    Im Unterschied zu expliziten Typumwandlungen erscheinen implizite Typumwandlungen nicht im Quelltext. Sie werden entweder nach durch die jeweilige Programmiersprache vorgegebenen Vorschriften, oder gemäß einem vom Programmierer an einer anderen Stelle im Quelltext festgelegten Verfahren durchgeführt.

    Beispiel:

    byte b = 100;
    int i = b;

    Dabei findet in der zweiten Zeile eine implizite Typumwandlung vom Typ byte in den Typ int statt. In diesem Fall ist die implizite Typumwandlung durch die Programmiersprache festgelegt.

    Implizite Typumwandlung findet oftmals nur dann statt, wenn kein Informationsverlust erfolgen kann, also wenn der Zieldatentyp einen gleichen oder größeren Wertebereich hat als der Ausgangsdatentyp. So erfolgt bei Bedarf zwar eine implizite Typumwandlung von byte (8 bit) nach int (16 bit), nicht aber umgekehrt.



  • verstehe, danke.


Log in to reply