Warum braucht man eine Instanz?



  • Hallo Programmierer,
    Ich selbst habe seit kurzem mit dem Borland CPlusplus Builder angefangen C++ zu programmieren und habe grad das Gefühl das insgesammte Prinzip der objektorientierten Programmierung noch nicht ganz verstanden zu haben.
    Es ist so, dass der Compiler zwei verschiedene Dateien erstellt- eine der Dateien hat immer die Endung *h und die andere die Endung *cpp.
    In der *cpp-Datei werden Funktionen, die in der *h-Datei erstellt werden aufgerufen und es kann mit ihnen gearbeitet werden.
    Nehmen wir einmal an ich schreibe eine Klasse "Dreieck" in die *h-Datei und möchte diese Klasse zum berechnen der Fläche des Dreiecks benutzen.
    Ich schreibe somit 3 Funktionen:

    setHoehe(float)
    setGrundseite(float)
    und flaeche(void)

    In meiner *cpp Datei kann ich jedoch nicht direkt auf die Klasse "Dreieck" zugreifen sondern muss erst eine Instanz erstellen mit "p3eck=new Dreieck;"
    Doch warum dieser Aufwand- meiner Meinung nach Blödsinn.
    Zudem weiß ich garnicht genau, was genau diese "Instanz" ist- was wird in diesem Speicherbereih überhaupt abgelegt???

    Ich würde mich sehr über Antworten freuen,- besonders, was eine Instanz bringt würde mich interessieren. - ich bin noch Anfänger.

    Danke

    David

    PS: 🙂 😃 😉 🙂 😃



  • Überleg dir mal, wenn du mehrere Dreiecke hast, wie du darauf sonst zugreifen kannst?
    Ich hoffe, du lernst anhand eines Buches oder eines Tutorials, ansonsten schau dir mal die Links (oben rechts) hier im Forum an.



  • Hallo

    dann arbeite erstmal die OOP-Grundlagen durch.

    bis bald
    akari



  • Im Header werden normalerweise die Klassen bzw. Funktionen definiert und erst in der CPP-Datei ausprogrammiert.

    // *.h
    
    // Klassendefinition
    class Dreieck
    {
      protected:
    
        double h, g;
    
      public:
    
        // Standard-Konstruktor
        Dreieck();
    
        // Konstruktor mit Parametern
        Dreieck(double NeuH, double NeuG);
    
        void SetzeH(double NeuH);
        void SetzeG(double NeuG);
    
        double Flaeche();
    };
    

    In der CPP werden überlicherweise die Funktionen ausprogrammiert, die du im Header definiert hast.

    // *.CPP
    
    // Standard-Konstruktor
    Dreieck::Dreieck()
    {
      this->H = 0;
      this->G = 0;
    }
    
    // Konstruktor mit Parametern
    Dreieck::Dreieck(double NeuH, double NeuG)
    {
      this->H = NeuH;
      this->G = NeuG;
    }
    
    void Dreieck::SetzeH(double NeuH)
    {
      this->H = NeuH;
    }
    
    void Dreieck::SetzeG(double NeuG)
    {
      this->G = NeuG;
    }
    
    // Fläche berechnen
    double Dreieck::Flaeche()
    {
      return ((this->G * this->H) / 2.0);
    }
    

    Aufruf dann zum Beispiel so:

    Dreieck MeinDreieck;
    
    MeinDreieck.SetzeH(2.5);
    MeinDreieck.SetzeG(1.5);
    
    double Flaeche = MeinDreieck.Flaeche();
    

    oder

    // H und G direkt übergeben
    Dreieck MeinDreieck(2.5, 1.5);
    
    double Flaeche = MeinDreieck.Flaeche();
    


  • Hallo Sunday,

    Kleine Korrektur

    Im Header werden normalerweise die Klassen bzw. Funktionen definiert und erst in der CPP-Datei ausprogrammiert.

    Richtiger:
    Im Header werden normalerweise die Klassen bzw. Funktionen deklariert und erst in der CPP-Datei definiert.
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-61231.html



  • Das ganze ist so:

    Eine Klasse ist im Prinzip der Bauplan für eine Instanz.
    Um Methoden und Eigenschaften nutzen zu können muss also erst einmal ein "Objekt" anhand des Bauplans konstruiert werden. Instanz ist auch nur ein anderes Wort für Objekt.

    Es ist auch möglich die Methoden direkt in die Klassen Definition zu schreiben, der Übersicht halber wird auch dies aufgeteilt.



  • Vielen Dank Leute- ich habe nun ein bisschen programiert und den Sinn einer Instanz verstanden.
    Dieses Forum hier ist wirklich sehr sinnvoll
    cya
    David


Anmelden zum Antworten