1 / 17

Einführung in die Programmiersprache C/C++

Einführung in die Programmiersprache C/C++. “Donnerstag” Andreas Döring doering@inf.fu-berlin.de SS 2004. Member-Funktion kennt ihr Objekt. Bei dem Aufruf einer Member-Funktion weiß diese, zu welchem Objekt der Aufruf geschieht: struct Hamster { void fuettern() {

airlia
Download Presentation

Einführung in die Programmiersprache C/C++

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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++" 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++" 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 TypHamster *

  4. Seminar: "Einführung in C/C++" 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++" Ablaufplan beim Erzeugen/Zerstören Objekt erzeugen: • Rufe Default Ctors der Basisklassen auf. • Rufe Default Ctors der Member-Variablen auf. • Rufe den Ctor des Objektes selbst auf. (Ablaufplan bei Zerstörung: Übungsaufgabe)

  6. Seminar: "Einführung in C/C++" 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++" 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++" Copy-Ctor im Detail Hamster (Hamster const & ham) { Alter = ham.Alter; } Anmerkungen: • Das Argument ham ist const: Es wird durch den CTornicht verändert. • Alternative Schreibweise für Initialisierung: Hamster billy; Hamster sunny(billy);

  9. Seminar: "Einführung in C/C++" 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++" 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++" Operatoren überladen Man kann fast alle Operatoren überladen. Ausnahmen (u.a.): . (Member selection) :: (Scope resolution) Zwei Möglichkeiten: • Durch Member-Funktion • Durch globale Funktion

  12. Seminar: "Einführung in C/C++" 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++" 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++" 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++" 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++" 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++" Standardlibraries Standard Headerdateien: <algorithm> <bitset> <cassert> <cctype> <cerrno> <cfloat> <ciso646> <climits> <clocale> <cmath> <complex> <csetjmp> <csignal> <cstdarg> <cstddef> <cstdio> <cstdlib> <cstring> <ctime> <cwchar> <cwctype> <deque> <exception> <fstream> <functional> <hash_map> <hash_set> <iomanip> <ios> <iosfwd> <iostream> <istream> <iterator> <limits> <list> <locale> <map> <memory> <new> <numeric> <ostream> <queue> <set> <sstream> <stack> <stdexcept> <streambuf> <string> <strstream> <utility> <valarray> <vector>  

More Related