Verwendung von Klassen in C++
Transcription
Verwendung von Klassen in C++
Verwendung von Klassen in C++ • • Heute: Benutzerdefinierte Datentypen (Konkrete Klassen) – Vektoren – Komplexe Zahlen – Adressdatei Morgen: Objektorientierte Programmierung (Abstrakte Klassen) – Vererbung – Polymorphie – Klassen-Hierarchien Strukturen In Strukturen können Daten (Elementvariablen) unterschiedlichen Typs verwendet werden. Beispiel: // Definition der Struktur “Adresse” struct Adresse { string Vorname; string Nachname; int Telefonnummer; }; … Adresse Strukturen int main () { Adresse A; A.Vorname = “Issac”; A.Nachname = “Newton”; A.Telefonnummer = 12345; … // Definition einer Variablen vom Typ Adresse cout << "Vorname: " << A.Vorname << endl; cout << "Nachname: " << A.Nachname << endl; cout << "Telefonnummer: " << A.Telefonnummer << endl << endl; } Adresse Überschreiben von Funktionen #include <iostream> #include <conio.h> double Summe (double a, double b) {return a+b;} int Summe (int a, int b) {return a+b;} int Summe (int a, int b, int c) {return a+b+c;} void main () { cout << Summe (1.0, 3.2) << endl; cout << Summe (1,2) << endl; cout << Summe (1,2,3) << endl; getch(); } Ueberschreib Strukturen Beispiel: 3-dimensionale Vektoren struct Vektor { // Deklaration der Struktur „Vektor“ double x, y, z; // Elementvariablen }; … int main () { Vektor a, b, c; // Definition der Vektoren a, b und c a.x = 0.0; a.y = 1.0; a.z = 2.0; // Wertzuweisung an die Elementvariablen von a b.x = 4.0; b.y = 5.0; b.z = 6.0; // Wertzuweisung an die Elementvariablen von b c.x = a.x + b.x; c.y = a.y + b.y; c.z = a.z + b.z; // Wertzuweisung an die Elementvariablen von c // Vektorsumme c = a + b cout << c.x << ´\t´ << c.y << ´\t´ << c.z; // Ausgabe von c } Vektor_als_Struktur Strukturen: Elementfunktionen Neben Elementvariablen können in Strukturen auch Elementfunktionen definiert werden struct Vektor { double x, y, z; double Betrag (); }; double Vektor::Betrag () { return sqrt (x*x+y*y+z*z); } int main () { Vektor a; a.x = 0.0; a.y = 1.0; a.z = 2.0; // Elementvariablen x, y und z // Deklaration der Elementfunktion Betrag // Definition der Elementfunktion Betrag, // die zur Struktur Vektor gehört cout << a.Betrag(); } Elementfunktion Strukturen: Konstruktor Beispiel: 3-dimensionale Vektoren struct Vektor { double x, y, z; Vektor (); Vektor (double, double, double); // Deklaration der Struktur Vektor // Elementvariablen x, y und z // Deklaration des Default-Konstruktors // (Ohne Parameter oder mit Default-Parametern) // Deklaration eines Konstruktors mit 3 Parametern }; Vektor::Vektor () {x=0.0; y=0.0; z=0.0;} Vektor::Vektor (double a, double b, double c) {x = a; y = b; z = c;} int main () { Vektor a (0.0, 1.0, 2.0); Vektor b; } // Definition des Default-Konstruktors // Definition von Konstruktor 2 // Konstruktor 2 wird verwendet // Default-Konstruktor wird verwendet Konstruktor Zugriffskontrolle Die Zugriffskontrolle erfolgt durch die Schlüsselwörter public, private und protected struct Vektor { public: double Betrag (); … private: double x, y, z; }; double Vektor::Betrag () { return sqrt (x*x+y*y+z*z); } int main () { Vektor a(1.0, 0.0, 1.0); cout << a.Betrag(); } // Deklaration der Elementfunktion Betrag // Definition der Konstruktoren // Elementvariablen x, y und z // Definition der Elementfunktion Betrag, // die zur Struktur Vektor gehört Zugriffskontrolle Rechenoperationen mit Elementfunktionen class Vektor { public: double x, y, z; … Vektor Summe (Vektor); }; … Vektor Vektor::Summe (Vektor v) {return Vektor (x+v.x, y+v.y, z+v.z);} // Deklaration der Struktur Vektor // Elementvariablen x, y und z // Deklaration der Konstruktoren // Elementfunktion Summe // Definition der Konstruktoren // Definition der Elementfunktion Summe, // die zur Klasse Vektor gehört int main () { Vektor a (0.0, 1.0, 2.0); Vektor b (4.0, 5.0, 6.0); Vektor c; c = a.Summe (b); cout << c.x << ´\t´ << c.y << ´\t´ << c.z; // c = a + b // Ausgabe des Ergenbnis } Rechenoperationen Operatoren Überschreiben von Operatoren: Der + Operator als Elementfunktion class Vektor { public: double x, y, z; … Vektor operator + (Vektor); }; … Vektor Vektor::operator + (Vektor v) {return Vektor (x+v.x, y+v.y, z+v.z);} // Deklaration der Klasse Vektor // Elementvariablen x, y und z // Deklaration der Konstruktoren // Deklaration des + Operators // Definition der Konstruktoren // Definition des + Operators, // die zur Klasse Vektor gehört int main () { Vektor a (0.0, 1.0, 2.0); Vektor b (4.0, 5.0, 6.0); Vektor c; c = a + b; cout << c.x << ´\t´ << c.y << ´\t´ << c.z; // c = a + b // Ausgabe des Ergenbnis } PlusOperator Übersicht: Wichtige Operatoren + - Operatoren können als • Elementfunktion oder • als globale Funktion definiert werden * / = << >> Globale Definition von Operatoren class Vektor { public: double x, y, z; … // Deklaration der Klasse Vektor // Elementvariablen x, y und z // Deklaration der Konstruktoren }; … Vektor operator + (Vektor v, Vektor w) {return Vektor (v.x+w.x, v.y+w.y, v.z+w.z);} int main () { Vektor a (0.0, 1.0, 2.0); Vektor b (4.0, 5.0, 6.0); Vektor c; c = a + b; cout << c.x << ´\t´ << c.y << ´\t´ << c.z; // Definition der Konstruktoren // Globale Definition des + Operators // c = a + b // Ausgabe des Ergenbnis } GlobaleOperatoren Operatoren Überschreiben von Operatoren: Der << Operator für die Ausgabe class Vektor { // Deklaration der Klasse Vektor public: double x, y, z; // Elementvariablen x, y und z … // Deklaration der Konstruktoren }; … // Definition der Konstruktoren ostream& operator << (ostream& f, Vektor v) // Globale Definition des << Operators { f << “(“ << v.x << “ , “ << v.y << “ , “ << v.z << “) “; return f; } int main () { Vektor a (0.0, 1.0, 2.0); cout << a; // Ausgabe von c→ (0.0 , 1.0 , 2.0) } AusgabeOperator Der Zuweisungsoperator = class Vektor { // Deklaration der Klasse Vektor public: double x, y, z; // Elementvariablen x, y und z … // Deklaration der Konstruktoren Vektor& operator = (&Vektor); // Deklaration des = Operators }; … // Definition der Konstruktoren Vektor& Vektor::operator = (&Vektor v) // Definition des = Operators, { x=v.x; y=v.y; z=v.z; // Kopieren der Elementvariablen return *this; // die zur Klasse Vektor gehört } int main () { Vektor a (0.0, 1.0, 2.0); Vektor b (4.0, 5.0, 6.0); Vektor c; c = a + b; // c = a + b cout << c.x << ´\t´ << c.y << ´\t´ << c.z; // Ausgabe des Ergenbnis } ZuweisungsOperator Copy -Konstruktor Beispiel: 3-dimensionale Vektoren class Vektor { public: double x, y, z; Vektor (&Vektor); … }; Vektor::Vektor (&Vektor v) { x = v.x; y = v.y; z = v.z; } int main () { Vektor a (0.0, 1.0, 2.0); Vektor b = a; } // Deklaration der Klasse Vektor // Elementvariablen x, y und z // Deklaration des Copy-Konstruktors // Weitere Konstruktoren // Definition des Copy-Konstruktors // Zuweisung // Konstruktor für (double,double,double) wird verwendet // Copy-Konstruktor wird verwendet CopyConstructor