Von der Struktur zur Klasse von C zu C++ Von Jens Hoffmann 18. 7. 2000 14StrukturKlasse 1 Die Struktur von C • Die Struktur umfasst immer nur einen Ausschnitt. Nur das, was für die Bearbeitung einer Aufgabe wichtig ist, wird in die Struktur aufgenommen. • Die Struktur reserviert keinen Speicherplatz (dient als Information für den Compiler) 14StrukturKlasse 2 • Beispiel für eine Struktur struct Artikel { char Bezeichnung[50]; char Artnummer[20]; float Preis; int LieferantenCode; }; • Typendefinition mit Strukturen In C ist der Strukturname alleine noch keine Typenbezeichnung typedef struct Artikel artikel 14StrukturKlasse 3 • Auch diese Anweisung reserviert noch keinen Speicherplatz. Sie sagt dem Compiler, dass ab jetzt „artikel“ ein Datentyp ist. • Definition von strukturierten Variablen Da es sich um einen Datentyp handelt, können Variable nach den gleichen Spielregeln angelegt werden wie einfache Variablen auch z.B. artikel CD; 14StrukturKlasse 4 • Informationsdateien In einer Informationsdatei ist die Strukturdefinition, die Deklarationen der Operatorfunktion und etwaige Konstanten zusammen. Im Englischen heißen diese Dateien „header files“ Der Anwender kann diese Informationsdatei mit Hilfe der Präprozessoranweisung „#include“ während der Übersetzung seiner eigenen Datei mit einlesen. 14StrukturKlasse 5 #include <stdio.h> #ifndef RATIOHEADER #define RATIOHEADER struct RATIO { int z; int n; } typedef struct RATIO ratio; void rprint (ratio *zeiger); ratio raddiere (ratio *r1, ratio *r2); #endif 14StrukturKlasse 6 • Die Abfrage „#ifndef“ (if not defined /falls nicht definiert) sucht nach dem Namen „RATIOHEADER“. Wird er nicht gefunden, wird der Rest der Datei bearbeitet. • Wurde die Datei während einer Übersetzung bereits einmal eingelesen, dann ist der Name bekannt und der Präprozessor sucht nach dem Ende der Bedingung bei „#endif“ 14StrukturKlasse 7 Probleme bei C • Der Compiler kann den privaten Typ nicht vollständig überprüfen • Ordnung und korrekter Aufbau der „header“- Dateien bleiben dem Programmierer Überlassen. • Weiter kann man mit den Strukturen in C keine wirklichen Datentypen definieren. 14StrukturKlasse 8 Die Klasse in C++ class artikel { private: float Preis; char Bezeichnung[40]; char EAN[20]; public: float GibPreis (); void SetzeEan (char *code); }; 14StrukturKlasse 9 • Die Klasse beinhaltet: 1. Die Typdefinition 2. die Deklaration der Datenelemente 3. Die Deklaration der zugelassenen Operationen 14StrukturKlasse 10 OOP • Objekt - orientierte Programmierung • Die Elemente einer Klasse können nun Daten - oder Funktionsdeklarationen sein. • Die zu einem Datenelement gehörende Funktion nennt man nun Methoden. 14StrukturKlasse 11 #include <stdio.h> #ifndef RATIOHEADER #define RATIOHEADER class ratio { private: int z; int n; public: void print (); ratio addiere (ratio *r2); }; #endif 14StrukturKlasse 12 Benennung der Informationsdatei • Der Name der Informationsdatei variiert bei verschiedenen Compilerherstellern. Am meisten verbreitet sind „..hpp“ und schlicht „.h“ 14StrukturKlasse 13 Implementierung der Methoden • Dem Namen der Methode muss man mit Hilfe des neuen Bereichsoperators den Namen der zugehörigen Klasse voranstellen. Die Zuordnung der Methode zu einer Klasse benutzt der Compiler zur Überprüfung 14StrukturKlasse 14 #include „ratio.hpp“ void ratio::print () { printf („%d / %d“,z, n); } ratio ratio ::addiere (ratio *op2) } ratio erg; erg.z = z * op2 ->n + n * op2 ->z; erg.n = n * op2 ->n; return erg; } 14StrukturKlasse 15