Klassen und Zeiger


  • oma-magda
  • 1062 Aufrufe 2 Antworten
  • Klassen und Zeiger

    Das Thema überhaupt bei C++ sind ja die Klassen. Aber ich habe immer noch nicht verstanden, wozu die da sind und wie man sie erstellt. Das gleiche gilt für Zeiger (Pointer).
    Kann mir da jemand weiterhelfen?
    Wissen ist Macht - Nichts wissen macht auch nichts.
  • Hi,

    eigentlich sollte man sowas in einem Buch o.Ä. nachlesen, aber ich erklärs dir mal grob.

    Also eine Klasse beinhaltet Datentypen und Methoden, am besten ich zeigs dir an einem Beispiel, das Auto eignet sich hierfür immer sehr gut. Du hast beim Auto als Datentypen z.B. die Reifen, Chassis, Lenkrad, Motor, etc. als Methoden (Funktionen) z.B. Gasgeben, Bremsen, etc.

    Der Vorteil hiervon du kannst "abstrakte" Klassen bilden, also das "komplexe" Auto, so weit vereinfachen wie du es brauchst, z.B. kann eine abstrakte Klasse für ein Auto, ein Motor, 4 Reifen, ein Lenkrad haben.

    Desweiteren kannst du vererben, du hast z.B. eine "Ober" Klasse Autos, und kannst "Unter" Klassen erstellen, wie Cabrio, Kombi, etc. Diesen Klassen kannst du die Datentypen u. Methoden von der "Ober" Klasse vererben, oder auch neue hinzufügen.

    Der Vorteil von Klassen ist in erster Linie dass du sie ähnlich wie Verbunde, record bzw. in C structs, überall wieder benutzen kannst, zudem braucht man nur eine Adresse zu wissen, die der Klasse, um auf alle Datentypen und Methoden, die diese enthält, zugreifen zu können.

    Ein weiterer Vorteil ist, dass du durch "Kapselung" fremde Funktionen, etc. den Zugriff auf bestimmte Datentypen oder Methoden deiner Klasse, verbietest, oder auch explizit erlaubst.

    Pointer sind nichts anderes sind als Zeiger (Pointer) auf Speicherstellen im RAM (wird noch unterschieden zwischen Heap und Stack), Pointer sind deshalb von großer Wichtigkeit da du jeden Datentyp, Arrays, structs, Klassen, ganz einfach damit erreichen kannst. Mit Pointer ist es auch sehr einfach komplexe Klassen einer Funktion, etc. übergeben zu können, ohne genau zu wissen was die Klasse alles enthält. Ein sehr gutes Beispiel, für die Verwendung von Pointern, findest du unter den Schlagwörtern einfach bzw. doppelt verkettete Liste oder Binärer Baum.

    Aber am besten du kaufst dir ein Buch oder besorgst dir ein Ebook, um dich da mal einzulesen, wenn du über google suchst, wirst du auch einige Seiten finden, die einfache Klassenbeispiele erklären.

    Greets Manastir
  • Ganz starke Erklärung Manastir, so richtig vonnem IT-Profi. :D .oO(sry aber damit kann kein Noob was anfangen ;), und nimms nicht persönlich ^^)

    Wenn ichs auch nochmal versuchen darf:

    Ne Klasse ist im Prinzip eine in sich geschlossene Einheit, die meist ein Teil eines Programms bildet. So könntest du dir zum Beispiel eine Klasse für ein FTP-Programm erstellen. Sagen wir mal, es sei eine Klasse die für die Verbindungen verantwortlich ist (kennst doch sicher SmartFTP, so du problemlos mit mehreren Threads saugen/uppen kannst). Diese Klasse würde jede einzelne Verbindung verwalten, sie würde den Verbindungen jeweils Befehle erteilen, ob sie nun das Verzeichnis wechseln oder eine Datein ziehen sollen, alles unabhängig voneinander.
    (Nun zur Klärung der Begriffe)
    Eine FTP-Verbindung ist ein Objekt der Klasse. Davon können natürlich mehrere gleichzeitig existieren, und jede für sich wird von der Klasse verwaltet. Wenn man also eine Klasse hat, erstellt man Objekte, mit denen das Programm oder besser die Klasse selbst arbeitet. Der Vorteil dabei ist, dass man später, wenn man zum Beispiel die GUI coden will, sich nicht darum sorgen muss, welchen verdammten WinSock-Befehl man gerade braucht um dies oder das mit der Verbindung zu machen. Man erstellt sich einfach eigene Funktionen auf, also beispielsweise eine Funktion zum downloaden einer Datei. Ohne sich Gedanken zu machen, wie man nun FTP-Befehle anwenden, Sockets erstellen oder ähnliches tun muss, gibt man der Klasse einfach den Befehl, dass die Verbindung sowieso die Datei sowieso downloaden soll, den Rest erledigt diese selbstständig.
    Diese Funktionen, wie z.B. "Download()" nennt man Methoden. Diese werden immer auf die gewünschten Objekte angewand (Beispiel: Verbindung3.Download("hallo.txt")).

    Soviel erstmal zur Grunderklärung, ich glaube die weiteren Prinzipien des OOPs sollte man wirklich nachlesen und ggf. ein Lateinisch-Römisch-Rückwärts-Wörterbuch zur Hilfe nehmen. :D

    Kurz zu den Zeigern:
    Zeiger werden in erster Linie benötigt, um dem Programm zu sagen, wo sich gewünschte Daten im RAM befinden. Da Arrays beispielweise aus mehreren Datenfeldern bestehen, muss logischerweise irgendwo gespeichert werden, wo dieses Array anfängt - in dem Zeiger. Ein Zeiger ist nichts weiter als eine Adresszahl im Arbeitspeicher. Der Inhalt eines Zeigerdatenfeldes sei z.B. 0x12345678, soll heißen an der Stelle 0x12345678 befindet sich im RAM das eine Array.
    Zeiger sind also da, um Adressen im RAM zu speichern - was daraus resultiert und was man damit alles machen kann, liest du am besten nach. :)