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.
-
-
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