C++ - Einführung in die Programmiersprache Objektorientierte Programmierung



Ähnliche Dokumente
Objektorientierte Programmierung mit Python Objekt und Klassen

Vorkurs C++ Programmierung

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Programmieren in Java

C++ - Objektorientierte Programmierung Polymorphie

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Objektorientierte Programmierung OOP

C++ - Objektorientierte Programmierung Klassen und Objekte

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Objektorientierte Programmierung. Kapitel 12: Interfaces

Zählen von Objekten einer bestimmten Klasse

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ

C++ - Objektorientierte Programmierung Vererbung

2. Semester, 2. Prüfung, Lösung

Fakultät Angewandte Informatik Lehrprofessur für Informatik

3 Objektorientierte Konzepte in Java

Einführung in die Java- Programmierung

Programmieren II Klassen. Programmieren II Klassen. Programmieren II Klassen. Programmieren II Klassen. Zur Erinnerung.

Deklarationen in C. Prof. Dr. Margarita Esponda

BEISPIELKLAUSUR Softwareentwicklung:

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Java: Vererbung. Teil 3: super()

Grundlagen von Python

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Klausur in Programmieren

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern

Objektorientierte Programmierung

Grundlagen. Kapitel 1

5. Abstrakte Klassen

Programmieren Tutorium

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

2. Programmierung in C

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 18

Software Engineering Klassendiagramme Einführung

Einführung in die C++ Programmierung für Ingenieure

Javakurs 2013 Objektorientierung

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Arrays Fortgeschrittene Verwendung

Java Kurs für Anfänger Einheit 5 Methoden

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Prinzipien Objektorientierter Programmierung

5.5.8 Öffentliche und private Eigenschaften

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Programmierkurs Java

EinfÅhrung in die objektorientiere Programmierung (OOP) unter Delphi 6.0. EDV Kurs 13/2

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einführung in die Programmierung

Programmiersprache 2 (C++) Prof. Dr. Stefan Enderle NTA Isny

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11

Objektorientierte Programmierung

Einführung in die Programmierung

Software Engineering Interaktionsdiagramme

Die Programmiersprache C99: Zusammenfassung

Klassendiagramm. Kurzer Überblick über UML - Stand BlaBla

Einführung in die Programmierung

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Einführung in die Programmierung mit C++

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

SEP 114. Design by Contract

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Computeranwendung und Programmierung (CuP)

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

4. AuD Tafelübung T-C3

Excel Funktionen durch eigene Funktionen erweitern.

Software Engineering Klassendiagramme Assoziationen

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

5 Projekt Bankverwaltung

Objektorientierte Programmierung mit C++ Vector und List

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

Softwaretechnik (Allgemeine Informatik) Überblick

Einführung in die Java- Programmierung

Software Engineering Klassendiagramme weiterführende Konzepte

Programmieren II Vererbung. Programmieren II Vererbung. Programmieren II Vererbung. Programmieren II Vererbung. Einleitende Bemerkungen

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Vererbung & Schnittstellen in C#

Arbeiten mit UMLed und Delphi

5.4 Klassen und Objekte

Objektorientierte Programmierung

Modellierung und Programmierung 1

Kapitel 6. Vererbung

Programmierkurs Java

1 Vom Problem zum Programm

Objektbasierte Entwicklung

Delegatesund Ereignisse

Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2

Transkript:

C++ - Einführung in die Programmiersprache Objektorientierte Programmierung hat Kanten hat eine Farbe hat eine Kantenfarbe Rechteck zeichnen Rechteck einfärben Rechteck drehen

Modulare Programmierung Projekt main.cpp int main(){ // Anweisungen } rechnen.cpp int addition(...) { } int subtraktion(...) { } rechnen.h int addition(...); int subtraktion(...); Einführung in die C++-Programmierung, 03.03.10 Seite 2

Erläuterung Jede Aufgabe wird in Teilaufgaben zerlegt. Eine Funktion stellt eine Teilaufgabe dar. Verschiedene Funktionen, die verschiedene Aufgaben innerhalb eines Projekts bewältigen, werden in einer Quelldatei zusammengefasst. Header-Dateien enthalten die Deklarationen und Definitionen. Quelldateien und Header-Dateien werden in einem Projekt gesammelt. Das Projekt bildet die Gesamtaufgabe ab. Einführung in die C++-Programmierung, 03.03.10 Seite 3

Objektorientierte Programmierung... abstrahiert Gegenstände der realen Welt, um sie in einem Programm abzubilden.... versucht Daten, die ein Objekt beschreiben und Prozeduren, die die Daten verändern, in einer Struktur zusammenzufassen.... versucht Daten und Funktionen, die die Daten verändern, in einer Struktur zu kapseln. Einführung in die C++-Programmierung, 03.03.10 Seite 4

Prinzipien Datenkapselung Die Daten gehören zu einem bestimmten Objekt. Ein fremdes Objekt kann diese Daten nicht lesen. Die Definition von Funktionen wird verborgen. Polymorphie Methoden (Funktionen) können überschrieben werden. Vererbung Kinder erben von ihren Eltern Eigenschaften und Methoden. Einführung in die C++-Programmierung, 03.03.10 Seite 5

Objekte beschreiben einen Gegenstand, Person etc. aus der realen Welt. sind Substantive in einem Text. haben Attribute (Eigenschaften), die das Aussehen des Objekts beschreiben. haben Methoden, die die Attribute verändern. Methoden spiegeln das Verhalten eines Objekts wieder. Einführung in die C++-Programmierung, 03.03.10 Seite 6

Beispiel Ein Würfel wird beschrieben: Der Würfel ist rot. Der Würfel hat eine Kantenlänge von 5 cm. Der Würfel kann gedreht werden. Der Würfel kann neu eingefärbt werden. Einführung in die C++-Programmierung, 03.03.10 Seite 7

Klassen sind Baupläne zur Beschreibung eines Objekts. abstrahieren das Aussehen und Verhalten eines bestimmten Objekttyps. bieten eine Schablone, um Objekte abstrakt zu beschreiben. definieren Eigenschaften (Attribute) und Methoden die alle Objekte eines bestimmten Typs besitzen. Einführung in die C++-Programmierung, 03.03.10 Seite 8

Beispiel Welche Eigenschaften hat jeder Würfel? Farbe. Kantenlänge Welche Methoden hat jeder Würfel? Drehen. Einfärben. Zeichnen. Einführung in die C++-Programmierung, 03.03.10 Seite 9

Beschreibung mit Hilfe von UML Unified Modelling Language zur Darstellung von Klassen etc. Der Name der Klasse steht am oberen Rand. Dem Namen folgen die Attribute der Klasse. Auf die Attribute kann von außen nicht zu gegriffen werden (-; private ). Am Ende werden die Methoden aufgelistet. Die Methoden dürfen von außen aufgerufen werden (+; public). Wuerfel - farbe : string - kante: double +get_farbe() : string +get_laenge() : float +set_farbe() : string +set_laenge(): float +drehen_wuerfel() : void Einführung in die C++-Programmierung, 03.03.10 Seite 10

Klassen in C++ class KUNDE { private: string kontonummer; string pinummer; float guthaben; int dispo; public: string getadress(); void setadress(string strasse, string plz, string ort); float hebeab(float betrag); float zahleein(float betrag); float changedispo(float betrag); }; Einführung in die C++-Programmierung, 03.03.10 Seite 11

Deklaration einer Klasse class KUNDE { private: // Attribute public: // Methoden }; beginnt mit dem Schlüsselwort class. Dem Schlüsselwort folgt der Name der Klasse. Attribute und Methoden werden mit Hilfe der geschweiften Klammern zu einer Struktur zusammengefasst. endet mit einem Semikolon. wird nie innerhalb der main-funktion definiert. Häufig werden sie in Header-Dateien ausgelagert. Einführung in die C++-Programmierung, 03.03.10 Seite 12

Regeln für Klassennamen Es können die Buchstaben a...z, A...Z, die Zahlen 0...9 sowie der Unterstrich genutzt werden. Klassennamen beginnen mit einem Großbuchstaben. Häufig haben Klassennamen das Präfix C, um sie von anderen Elementen in C++ zu unterscheiden. Unterscheidung zwischen Groß- und Kleinschreibung. Einführung in die C++-Programmierung, 03.03.10 Seite 13

Weitere Hinweise Nutzen Sie aussagekräftige Namen. Der Oberbegriff aus der realen Welt sollte auch für die dazugehörige Klasse in C++ genutzt werden. Jedes Teilwort eines Klassennamen beginnt mit mit einem Großbuchstaben. Es wird ein Sprachraum genutzt. Schlüsselwörter der Programmiersprache C++ dürfen nicht genutzt werden. Einführung in die C++-Programmierung, 03.03.10 Seite 14

in einer Projektbeschreibung Klassen entsprechen Substantiven in einer Projektbeschreibung. Das Konto wird für den Inhaber xyz von der Bank a eröffnet. Das Auto HI hat den Besitzer xyz. Mitarbeiter Müller arbeitet an dem Projekt Ausschreibung. Die Bestellung wird über einen Laserdrucker xyz ausgedruckt. Außendienstmitarbeiter Meier betreut Kunden im Bezirk Unterweser. Redundante oder für die Aufgabenstellung unnötige Klassen werden nicht implementiert. Einführung in die C++-Programmierung, 03.03.10 Seite 15

Attribute (Member) beschreiben einen Gegenstand, Person, Funktion etc. Jedes Objekt einer Klasse hat die gleichen Attribute. Jedes Objekt einer Klasse unterscheidet sich aber in mindestens einem Attributwert von allen anderen Objekten. werden für jedes Objekt im Speicher angelegt. Anschließend werden die Attribute mit bestimmten Werten initialisiert. Einführung in die C++-Programmierung, 03.03.10 Seite 16

implementieren class KUNDE{ private: string kontonummer; string pinummer; float guthaben; int dispo; }; sind Variablen in C++, gekapselt in einer Klasse. Der Datentyp bestimmt die Art des Attributs. Es kann jeder Datentyp aus C++ genutzt werden. Jede Deklaration endet mit einem Semikolon. Einführung in die C++-Programmierung, 03.03.10 Seite 17

in der Projektbeschreibung Attribute entsprechen meist der Beschreibungen eines Objekts. Das Auto ist rot und hat einen KM-Stand von 130.000. Die Milch ist pasteurisiert. Sobald ein Buch im Lager vorhanden ist, wird es an den Kunden ausgeliefert. Attribute sind Substantive, die einen Rückbezug auf ein anderes Substantiv besitzen. Die Menge des Artikels. Ausleihdatum des Buches. Anmeldung eines Autos. Einführung in die C++-Programmierung, 03.03.10 Seite 18

Statische Attribute class _CGirokonto{ private: static float zinssatz; }; float _CGirokonto::zinssatz = 2.0; werden nur einmal für alle Objekte einer Klasse im Speicher abgelegt. werden in der Klasse deklariert (static float zinssatz;). werden außerhalb der Klasse definiert und initialisiert (float _CGirokonto::zinssatz = 2.0). Einführung in die C++-Programmierung, 03.03.10 Seite 19

Methoden beschreiben das Verhalten eines Objekts. lesen oder verändern Attributwerte. beschreiben eine Schnittstelle nach außen. werden nur einmal für die Klasse im Speicher angelegt. Einführung in die C++-Programmierung, 03.03.10 Seite 20

deklarieren und definieren Methoden werden immer in einer Klasse deklariert. Methoden können in der Klasse definiert werden. außerhalb der Klasse definiert werden. Einführung in die C++-Programmierung, 03.03.10 Seite 21

Prototyp einer Methode Datentyp Methodenname(para01, para02,...); class KUNDE{ // Attribute public: string getadress(); void setadress(string strasse, string plz, string ort); float hebeab(float betrag); float zahleein(float betrag); float changedispo(float betrag); }; sind C++ Funktionsprototypen, gekapselt in einer Klasse. Jede Deklaration wird mit einem Semikolon beendet. Einführung in die C++-Programmierung, 03.03.10 Seite 22

in der Projektbeschreibung Methoden sind meist Verben. Das Bankkonto wird eröffnet. Der Inhaber hebt eine bestimmte Summe von seinem Konto ab. Beschreibung einer Zustandsänderung / Änderung: Wenn die Ampel gelb ist, wird die Geschwindigkeit des Autos vermindert. Wenn die Helligkeit draußen einen bestimmten Prozentwert unterschreitet, wird die Straßenlaterne eingeschaltet. Eine Zugdurchfahrt wird gemeldet. Die Schranke wird geschlossen. Einführung in die C++-Programmierung, 03.03.10 Seite 23

Deklaration und Definition in der Klasse class KUNDE{ // Methoden public: string getadress() { stringstream tmpadresse; tmpadresse << kundename << ", " << kundevorname << endl; tmpadresse << kundestrasse << endl; tmpadresse << kundeplz << " " << kundeort<< endl; return tmpadresse.str(); } }; Einführung in die C++-Programmierung, 03.03.10 Seite 24

Hinweise Die gleichzeitige Deklaration und Definition einer Methode muss nicht mit einem Semikolon abgeschlossen werden. Eine Definition der Methode innerhalb der Klasse sollte nur für sehr kleine Funktionen genutzt werden. lesenden Zugriffe verwendet werden. Es wird auf die Werte der Attribute zugegriffen, aber die Werte werden nicht verändert. Einführung in die C++-Programmierung, 03.03.10 Seite 25

Definition außerhalb der Klasse, aber in einer Datei class KUNDE{ // Attribute public: void setadress(string strasse, string plz, string ort); }; void KUNDE::setAdress(string strasse, string plz, string ort) { kundestrasse = strasse; kundeplz = plz; kundeort = ort; } Einführung in die C++-Programmierung, 03.03.10 Seite 26

Aufbau des Methodenkopfs void KUNDE::setAdress(string strasse, string plz, string ort) void definiert den Funktionstyp. Welchen Datentyp gibt die Methode zurück? KUNDE beschreibt die Klasse, in der die Methode deklariert ist. Die Klasse und der Methodennamen sind durch zwei Doppelpunkte getrennt. Zwischen den zwei Doppelpunkten darf kein Leerzeichen stehen. Dem Methodennamen folgt die Parameterliste. In der Parameterliste werden die Eingabeparameter für die Methode, getrennt durch Kommata, aufgelistet. Einführung in die C++-Programmierung, 03.03.10 Seite 27

Bereichsoperator (Soope-Operator) besteht aus zwei nacheinander folgenden Doppelpunkten. Links vom Bereichsoperator steht die Klasse, in der die Methode deklariert wurde. Rechts vom Bereichsoperator steht die zu definierte Methode. Einführung in die C++-Programmierung, 03.03.10 Seite 28

Klassen in der Praxis kunde.h class KUNDE { private: // Attribute public: void setadress(...); }; kunde.cpp class KUNDE { private: // Attribute public: void setadress(...); }; Die Schnittstelle wird von der Implementierung getrennt. Die Schnittstelle in der Header-Datei sollte nicht verändert werden. Vorteil: Änderungen im Methodenrumpf benötigen keine Neu- Kompilierung der Header-Datei. Einführung in die C++-Programmierung, 03.03.10 Seite 29

Beispiel: Header-Dateien class KUNDE { private: string kundename; string kundevorname; string kundestrasse; string kundeplz; string kundeort; string pinnummer; }; public: void setadress(string strasse, string plz, string ort); void setpinnummer(string pin); Einführung in die C++-Programmierung, 03.03.10 Seite 30

Beispiel: Methoden-Definition in einer Quelldatei #include "objektkunde.h" void KUNDE::setPinnummer(string pin){ pinnummer = pin; } void KUNDE::setAdress(string strasse, string plz, string ort){ kundestrasse = strasse; kundeplz = plz; kundeort = ort; } Einführung in die C++-Programmierung, 03.03.10 Seite 31

Zugriff festlegen private: oder public:. Mit Hilfe des Schlüsselwortes private oder public wird die Zugriffsart festgelegt: Dem Schlüsselwort folgt immer ein Doppelpunkt. Das Zugriffsrecht gilt für alle nachfolgenden Zeilen. Einführung in die C++-Programmierung, 03.03.10 Seite 32

Zugriffsrecht private Das Element ist in der Klasse / in dem Block gekapselt. Zugriff nur innerhalb der eigenen Klasse. Ein Zugriff von außen ist nicht möglich. Die Elemente der Klasse sind schreibgeschützt. wird für Attribute einer Klasse genutzt. Die Werte der Attribute können nicht außen unkontrolliert verändert werden. In einer Klasse sind alle Elemente standardmäßig privat. Einführung in die C++-Programmierung, 03.03.10 Seite 33

Zugriffsrecht public Die Elemente sind öffentlich. Auf die Elemente kann von außen zu gegriffen werden. Methoden sind öffentlich zugänglich. Die Methoden einer Klasse können von außen aufgerufen werden. beschreibt eine Schnittstelle nach außen. Einführung in die C++-Programmierung, 03.03.10 Seite 34

Konstante Methoden class KUNDE { Private: // Attribute }; public: string getadress() const; // Methoden string KUNDE::getAdress() const { stringstream tmpadresse; // Anweisungen return tmpadresse.str(); } Einführung in die C++-Programmierung, 03.03.10 Seite 35

Hinweise In der Deklaration sowohl als auch in der Definition muss am Ende des Methodenkopf das Schlüsselwort const angegeben werden. Konstante Methoden lesen Attribute, verändern diese aber nicht. Eine konstante Methode kann im Methodenrumpf nur eine weitere konstante Methode aufrufen. Konstante Objekte können nur konstante Methoden aufrufen. Einführung in die C++-Programmierung, 03.03.10 Seite 36

Objektvariable KUNDE mykunde; class KUNDE mykunde;... definiert eine Variable der entsprechenden Klasse. verweist auf die Speicheradresse, an der das Objekt abgelegt ist.... nutzt als Datentyp den Namen einer Klasse. Der Name der Objektvariablen ist frei wählbar. Das Schlüsselwort class wird bei einem eindeutigen Klassennamen nicht benötigt. Einführung in die C++-Programmierung, 03.03.10 Seite 37

Methoden aufrufen mykunde.setadress("straße", "38640", "Goslar"); cout << mykunde.getadress() << endl; mykunde.setpinnummer("1234"); Methoden werden mit ihren Namen aufgerufen. Die Parameterliste kann leer sein oder die zu übergebenen Parameter auflisten. Die Objektvariable wird mit der Methode durch den Punkt verbunden. Die Objektvariable ist ein Synonym für die Klasse, in der die Methode deklariert ist. Einführung in die C++-Programmierung, 03.03.10 Seite 38

Lebenszyklus eines Objekts erzeugen: Aufruf eines Konstruktors KUNDE mykunde; arbeiten: Methoden aufrufen mykunde.setpinnummer("1234"); zerstören: Destruktor automatisch aufrufen Einführung in die C++-Programmierung, 03.03.10 Seite 39

Konstruktoren class KUNDE { private: // Attribute public: KUNDE(string nachname, string vorname) { kundename = nachname; kundevorname = vorname; } sind spezielle Methoden zur Initialisierung eines Objekts. setzen Anfangswerte für ein Objekt. Einführung in die C++-Programmierung, 03.03.10 Seite 40

Kopf eines Konstruktors KUNDE(string nachname, string vorname) Als Bezeichnung wird der Name der Klasse genutzt. Die folgende Parameterliste kann leer sein. Es werden keine Startwerte für die Attribute gesetzt. kann die gewünschten Eingabeparameter enthalten. Diese Parameter werden genutzt, Startwerte für die Attribute zu setzen. Einführung in die C++-Programmierung, 03.03.10 Seite 41

Eigenschaften Konstruktoren dürfen kein Objekt der eigenen Klasse anlegen. Konstruktoren haben immer das Zugriffsrecht public. Konstruktoren werden automatisch durch die Deklaration einer Objektvariablen aufgerufen. Konstruktoren setzen keine statischen Attribute. Durch die Erzeugung würde das statische Attribut auf den Anfangswert gesetzt werden. Es wird kein Wert zurückgegeben. Der Zustand des Objektes kann nur über die entsprechenden Methoden ermittelt werden. Konstruktoren können nie konstant sein. Konstruktoren können überladen werden. Einführung in die C++-Programmierung, 03.03.10 Seite 42

implementieren werden wie Methoden in der Klasse gleichzeitig deklariert und definiert. Andere Möglichkeit: Die Deklaration des Konstruktors befindet sich innerhalb der Klasse. Die Definition des Konstruktors befindet sich außerhalb der Klasse. Einführung in die C++-Programmierung, 03.03.10 Seite 43

in der Klasse deklarieren und definieren class KUNDE { private: // Attribute public: KUNDE(string nachname, string vorname) { kundename = nachname; kundevorname = vorname; } Einführung in die C++-Programmierung, 03.03.10 Seite 44

außerhalb der Klasse implementieren class KUNDE { private: // Attribute public: KUNDE(string nachname, string vorname); }; KUNDE::KUNDE(string nachname, string vorname) { kundename = nachname; kundevorname = vorname; } Einführung in die C++-Programmierung, 03.03.10 Seite 45

Überladene Konstruktoren deklarieren class KUNDE { private: // Attribute public: // Der Standard-Konstruktor hat nie Eingabeparameter KUNDE(); // Weitere Konstruktoren KUNDE(string nachname, string vorname); KUNDE(string nachname, string vorname, string kontonummer); }; // Methoden Einführung in die C++-Programmierung, 03.03.10 Seite 46

Standard-Konstruktoren werden keine Parameter übergeben. muss immer ohne Klammern aufgerufen werden. werden vom System automatisch erzeugt. Die Attribute erhalten unbestimmte Werte. wird selbst definiert. Die Attribute werden mit Hilfe von Standardwerten initialisiert. Einführung in die C++-Programmierung, 03.03.10 Seite 47

Allgemeine Konstruktoren Die Parameterliste kann aus beliebig vielen Parametern bestehen. können mit Hilfe der Anzahl und des Datentyps der Parameters wie Funktionen überladen werden. Wenn ein allgemeiner Konstruktor vorhanden ist, wird vom System kein Standardkonstruktor erzeugt. Einführung in die C++-Programmierung, 03.03.10 Seite 48

Überladene Konstruktoren definieren KUNDE::KUNDE() { kundename = ""; kundevorname = ""; } KUNDE::KUNDE(string nachname, string vorname) { kundename = nachname; kundevorname = vorname; } KUNDE::KUNDE(string nachname, string vorname, string bankkonto) { kundename = nachname; kundevorname = vorname; kontonummer = bankkonto; } Einführung in die C++-Programmierung, 03.03.10 Seite 49

Objekte erzeugen // Der Konstruktor erwartet keine Eingabeparameter class KUNDE KundeNoInfo; // Es werden zwei Eingabeparameter erwartet class KUNDE mykunde("nachname", "Vorname"); // Es werden drei Eingabeparameter erwartet class KUNDE KundeKonto("Nachname", "Vorname", "123456"); Einführung in die C++-Programmierung, 03.03.10 Seite 50

Default-Parameter nutzen class KUNDE { private: // Attribute public: KUNDE(); KUNDE(string nachname, string vorname, string bankkonto= ""); // Methoden }; KUNDE::KUNDE() { // Anweisungen} KUNDE::KUNDE(string nachname, string vorname, string bankkonto) { // Anweisungen } Einführung in die C++-Programmierung, 03.03.10 Seite 51

Hinweise Default-Parameter werden nur in der Deklaration gesetzt. Bevor Default-Parameter genutzt werden können, müssen diese bekannt sein. Nach einem Default-Parameter werden nur weitere Default- Parameter aufgelistet. Default-Parameter befinden sich am Ende der Parameterliste. Einführung in die C++-Programmierung, 03.03.10 Seite 52

Konstante Attribute deklarieren class KUNDE { private: const string kundenummer; // Initialisierung im Konstruktor string kundename; string kundevorname; }; public: // Konstruktoren // Methoden Einführung in die C++-Programmierung, 03.03.10 Seite 53

Initialisierung im Standard-Konstruktor class KUNDE { private: const string kundenummer; }; public: KUNDE(); KUNDE::KUNDE() : kundenummer("1111") { kundename = ""; kundevorname = ""; } Einführung in die C++-Programmierung, 03.03.10 Seite 54

Initialisierungsliste KUNDE::KUNDE() : kundenummer("1111") { Die Initialisierungsliste wird vom Kopf des Konstruktors durch ein Doppelpunkt getrennt. besteht in diesem Beispiel nur aus dem Element kundenummer("1111"). kann mehrere Elemente, getrennt durch Kommata besitzen. Das Attribut kundennummer wird mit dem Wert 1111 initialisiert. Die Reihenfolge der Initialisierung richtet sich nach der Reihenfolge der Attribute in der Klasse. Einführung in die C++-Programmierung, 03.03.10 Seite 55

Nutzen Konstante Attribute initialisieren. Attribute, die als Referenzen deklariert sind, initialisieren. Attribute werden direkt beim Anlegen der Datenstruktur initialisiert. Einführung in die C++-Programmierung, 03.03.10 Seite 56

Initialisierung im allgemeinen Konstruktor class KUNDE { private: const string kundenummer; public: KUNDE(); }; // muss KUNDE(string kundenr, string nachname) : kundenummer(kundenr) { kundename = nachname; kontonummer = bankkonto; } Einführung in die C++-Programmierung, 03.03.10 Seite 57

Definierte Klassen als Datentyp nutzen #ifndef BANK_CLASSGIROKONTO_H_INCLUDED #define BANK_CLASSGIROKONTO_H_INCLUDED #include "classkunde.h" // Definition des Datentyps _CKunde class _CGirokonto { private: _CKunde owner; string kontonummer; string pinnummer; float kontostand; int dispo; // Als Datentyp wird eine Klasse genutzt Einführung in die C++-Programmierung, 03.03.10 Seite 58

Hinweis Attribute können nur vom Typ einer anderen Klasse sein. Es werden Objekte anderen Typs eingegebetttet. Attribute können nicht vom Typ der eigenen Klasse sein. Die Nutzung einer vorher definierten Klasse als Datentyp implementiert eine hat eine -Beziehung oder besitzt eine - Beziehung. Diese Art von Beziehung wird als Aggregation bezeichnet. Zum Beispiel: Ein Konto hat eine Person als Besitzer. Ein Person existiert ohne ein Konto. Ein Konto existiert aber nicht ohne eine Person. Einführung in die C++-Programmierung, 03.03.10 Seite 59

Allgemeinen Konstruktor nutzen class _CGirokonto { private: _CKunde owner; // Als Datentyp wird eine Klasse genutzt public: // nur mit Initialisierungsliste möglich _CGirokonto(string kontonr, string pin, string kundennummer, string nachname, string vorname) : owner(kundennummer, nachname, vorname) { kontonummer = kontonr; kontostand = 10.0; } Einführung in die C++-Programmierung, 03.03.10 Seite 60

Objekte erzeugen class _CGirokonto mykonto("12345678", "7894","27", "Edda", "Mann"); class _CKunde mykunde("26", "Nachname", "Vorname"); Die Signatur der Parameterliste muss zu einem Konstruktor passen. werden innerhalb eines Blocks angelegt. Die Objektvariable ist lokal. erzeugt ein neues Objekt und initialisiert dieses. Eingebettete Objekte werden durch Aufruf eines Konstruktors vor dem umschließenden Objekt initialisiert. Einführung in die C++-Programmierung, 03.03.10 Seite 61

Dynamische Objektvariablen class _CGirokonto *mykonto; mykonto = new _CGirokonto("12345678", "7894","27", "Edda", "Mann"); werden als Zeiger implementiert. Mit Hilfe von new wird Speicher für das Objekt der Klasse angefordert. das Objekt mit Hilfe eines Konstruktors initialisiert. Der Zeiger verweist auf das neue Objekt. Einführung in die C++-Programmierung, 03.03.10 Seite 62

löschen class _CGirokonto *mykonto; mykonto = new _CGirokonto("12345678", "7894","27", "Edda", "Mann"); delete mykonto; Mit Hilfe von delete wird das Objekt aus dem Speicher entfernt. Einführung in die C++-Programmierung, 03.03.10 Seite 63

Aufruf von Methoden class _CGirokonto *mykonto; mykonto = new _CGirokonto("12345678", "7894","27", "Edda", "Mann"); std::cout << mykonto->getkontoinfo() << std::endl; Die Methode und das Objekt werden durch den Operator -> verbunden. Einführung in die C++-Programmierung, 03.03.10 Seite 64

Arrays von Objektvariablen class _CKunde neukunde[10]; neukunde[0].setadress("strasse", "Ort", "Name"); class _CKunde neukunde[10]; legt ein Array von 10 Objekten vom Typ _Ckunde an. Für die Definition wird ein Konstruktor ohne Parameter benötigt. Die Attribute des Objekts werden mit Hilfe von Methoden gesetzt. Einführung in die C++-Programmierung, 03.03.10 Seite 65

Methoden aufrufen class _CKunde neukunde[10]; neukunde[0].setadress("strasse", "Ort", "Name"); Die Elemente des Arrays werden mit Hilfe von Indizies aufgerufen. Jeder Index ist ein Platzhalter für ein Objekt. Die aufzurufende Methode wird mit Hilfe des Punktoperators mit einem Objekt verbunden. Einführung in die C++-Programmierung, 03.03.10 Seite 66

Array von dynamischen Objektvariablen class _CKunde *array_kunde; array_kunde = new _CKunde[10]; werden als Zeiger implementiert. Mit Hilfe von new wird der gewünschte Speicher für das Array angefordert. jedes Objekt mit dem Standard-Konstruktor definiert. Der Zeiger verweist auf das erste Element im Array. Einführung in die C++-Programmierung, 03.03.10 Seite 67

löschen delete[] array_kunde; Als Kennzeichen für die Löschung eines dynamischen Arrays folgen dem Schlüsselwort delete die eckigen Klammern. Das Weglassen der eckigen Klammern erzeugt keine Fehlermeldung, sondern nur eine fehlerhafte Löschung im Speicher. In diesem Beispiel wird das dynamische Array array_kunde gelöscht. Einführung in die C++-Programmierung, 03.03.10 Seite 68

Methoden aufrufen (array_kunde+anzahl)->setkundenname("müller", "Else"); Die Methode wird mit Hilfe des ->-Operators mit dem dazugehörigen Objekt verbunden. Das gewünschte Objekt kann mit Hilfe von Indizies ermittelt werden. Andere Möglichkeit: Der Zeiger wird auf das gewünschte Element verschoben. Hinweis: Der Zeiger auf das erste Element muss erhalten bleiben. Andernfalls kann das Array nicht gelöscht werden. Einführung in die C++-Programmierung, 03.03.10 Seite 69