static_cast< >



  • Ich hoffe der Programmtext aus meiner Main reicht hier aus, um mein Problem genau genug zu beschreiben. Wenn die anderen headerdatein benötigt werden dann bitte sagen.

    Kurz gesagt mein Problem besteht in dieser Zeile des Programmes aus meinem Buch. Ich kann es mir noch so oft durchlesen. Ich verstehe Sie einfach net zeiger2=static_cast<Ring *>(zeiger); //was macht das static_cast allgemein????

    #include <iostream>
    #include <stdlib.h>
    #include "Schablone.h"
    #include "Ring.h"
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        Kreis *zeiger;
        Ring  *zeiger2;
        Ring schwarz_ring ("SCHWARZ", 15, 4);
        schwarz_ring.getFarbe();
        cout << "\nFlaeche des Ringes: "
             << schwarz_ring.berechneFlaeche();
        zeiger=&schwarz_ring;
        zeiger->getFarbe();
        cout << "\nFlaeche: "
             << zeiger->berechneFlaeche();
        zeiger2=static_cast<Ring *>(zeiger);
        zeiger2->getFarbe();
        cout << "\nFlaeche: "
             << zeiger2->berechneFlaeche();
      fflush(stdin);
      getchar();	
      return 0;
    }
    


  • Schüler schrieb:

    was macht das static_cast allgemein????

    http://tutorial.schornboeck.net/casts.htm

    Aber da die Zeile ("zeiger=&schwarz_ring;") anscheinend einwandfrei kompiliert,
    nehm ich mal an, der static_cast<> is in deinem Beispiel überlüssig.



  • Dankeschön, genau so eine page hab ich gebraucht. Damit hat sich mein Problem gelöst:)



  • Hallo Schüler,

    dir ist sicher bekannt, dass es Datentypen gibt: int, float etc. Beide haben im Rechner unterschiedliches Bitmuster. Deshalb kann man int-Variablen nicht einfach float-Variablen zuweisen. Man muss sie zwangsweise umwandeln mit static_cast.

    In deinem Programm sieht das so ähnlich aus:

    Kreis *zeiger; ist hier ein Zeiger auf ein Objekt vom Typ Kreis (=Adresse!).
    zeiger = &schwarz_ring; // zeiger erhält die Adresse von schwarz_ring
    Weiss der Geier, warum Zeiger_auf_Kreis die Adresse eines Rings erhält, vermutlich müssen die durch Vererbung einander bekannt sein.
    Dann wird ein schwarz_ring mit Farbe gefüllt.
    Mit
    zeiger2=static_cast<Ring *>(zeiger); wird der Zeiger zeiger zwangsweise umgewandelt in einen vom Typ zeiger2, das ist aber ein Zeiger auf einen Ring.

    Probier mal folgendes:

    zeiger2 = &zeiger;

    das müsste nämlich (einfacher) gehen. Was ist das für ein Buch mit so sonderbarem Code, oder hast du richtig abgeschrieben?

    Gruss Jerry 🙂



  • Danke auch für die gute Erklärung. Des Buch ist C++ von Helmut Erlenkötter:).
    Also danke nochmal:)


Anmelden zum Antworten