Gewicht ); } int Gewicht; }; this hat den Typ Hamster *"> Gewicht ); } int Gewicht; }; this hat den Typ Hamster *">

Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Donnerstag Andreas Döring SS 2004.

Ähnliche Präsentationen


Präsentation zum Thema: "Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Donnerstag Andreas Döring SS 2004."—  Präsentation transkript:

1 Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Donnerstag Andreas Döring doering@inf.fu-berlin.de SS 2004

2 Seminar: "Einführung in C/C++"2 Member-Funktion kennt ihr Objekt Bei dem Aufruf einer Member-Funktion weiß diese, zu welchem Objekt der Aufruf geschieht: struct Hamster { void fuettern() { ++Gewicht; } int Gewicht; }; Hamster billy; billy.fuettern(); erhöhe billy.Gewicht

3 Seminar: "Einführung in C/C++"3 Der this -Pointer In einer Member-Funktion zeigt der this -Pointer auf das aktuelle Objekt: struct Hamster { void fuettern() { ++( this->Gewicht ); } int Gewicht; }; this hat den Typ Hamster *

4 Seminar: "Einführung in C/C++"4 Ctors und Dtor Konstruktoren: Aufruf bei Erzeugung eines Objekts. Destruktor: Aufruf bei der Zerstörung eines Objekts. Konstruktor ohne Argument: Default Ctor struct Hamster { Hamster() { } };

5 Seminar: "Einführung in C/C++"5 Ablaufplan beim Erzeugen/Zerstören Objekt erzeugen: 1.Rufe Default Ctors der Basisklassen auf. 2.Rufe Default Ctors der Member-Variablen auf. 3.Rufe den Ctor des Objektes selbst auf. (Ablaufplan bei Zerstörung: Übungsaufgabe)

6 Seminar: "Einführung in C/C++"6 Objekte kopieren Es gibt zwei Fälle, in denen Objekte kopiert werden: 1. Initialisierung: Hamster billy; Hamster sunny = billy; 2. Zuweisung: Hamster billy, sunny; sunny = billy;

7 Seminar: "Einführung in C/C++"7 1. Kopieren bei Initialisierung Objekte werden mit dem Copy Konstruktor bei der Initialisierung kopiert: struct Hamster { Hamster() { Alter = 0; } Hamster(Hamster const & ham){ Alter = ham.Alter; } int Alter; }; Hamster billy; Hamster sunny = billy;

8 Seminar: "Einführung in C/C++"8 Copy-Ctor im Detail Hamster (Hamster const & ham) { Alter = ham.Alter; } Anmerkungen: Das Argument ham ist const : Es wird durch den CTor nicht verändert. Alternative Schreibweise für Initialisierung: Hamster billy; Hamster sunny(billy);

9 Seminar: "Einführung in C/C++"9 2. Kopieren bei Zuweisung Bei Zuweisungen wird statt dessen der assignment- Operator ausgeführt: struct Hamster {... Hamster & operator= (Hamster const & ham) { Alter = ham.Alter; return *this; } int Alter; }; Hamster billy, sunny; sunny = billy;

10 Seminar: "Einführung in C/C++"10 operator= im Detail Hamster & operator= (Hamster const & ham) { Alter = ham.Alter; return *this; } Anmerkungen: Argument ham ist const : Es wird durch operator= nicht verändert. Es wird das Objekt selbst zurückgegeben: *this Der Typ der Rückgabe ist Hamster &.

11 Seminar: "Einführung in C/C++"11 Operatoren überladen Man kann fast alle Operatoren überladen. Ausnahmen (u.a.):. (Member selection) :: (Scope resolution) Zwei Möglichkeiten: 1.Durch Member-Funktion 2.Durch globale Funktion

12 Seminar: "Einführung in C/C++"12 1. Operatoren als Member-Funktion unäre Operatoren: Wirken aufs aktuelle Objekt Hamster & Hamster::operator~ () {...} binäre Operatoren: Aktuelles Objekt steht links. Hamster & Hamster::operator+ ( int const right ) {... }

13 Seminar: "Einführung in C/C++"13 2. Operatoren als globale Funktion unäre Operatoren: Hamster & operator~ (Hamster const & hams) {...} binäre Operatoren: Aktuelles Objekt steht links. Hamster & operator+ (Hamster const & left, int const right) {... }

14 Seminar: "Einführung in C/C++"14 virtuelle Funktionen (1) Das Problem: sei z.B. folgendes Programm gegeben: struct Auto { void tanken() { std::cout << "Benzin";...} void starten() { if (Tankfuellung == 0) tanken();... } }; struct Solarmobil: Auto { void tanken() { std::cout << "Sonne";... } };

15 Seminar: "Einführung in C/C++"15 virtuelle Funktionen (2)... Solarmobil mob; mob.starten(); Ausgabe: Benzin Grund: Die Basisklasse Auto kennt die abgeleitete Klasse Solarmobil nicht. void starten() { tanken(); this-Pointer hat Typ Auto * }

16 Seminar: "Einführung in C/C++"16 virtuelle Funktionen (3) Lösungsmöglichkeit: virtual struct Auto { virtual void tanken() {...} };... Solarmobil mob; mob.starten();//Ausgabe: "Sonne"

17 Seminar: "Einführung in C/C++"17 Standardlibraries Standard Headerdateien:

18 Seminar: "Einführung in C/C++"18 (Notizseite)


Herunterladen ppt "Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Donnerstag Andreas Döring SS 2004."

Ähnliche Präsentationen


Google-Anzeigen