Seminar: "Einführung in C/C++"
Einführung in die Programmiersprache C/C++
“Donnerstag”
Andreas Dö[email protected]
SS 2004
Seminar: "Einführung in C/C++" 2
Member-Funktion kennt ihr ObjektBei 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
Seminar: "Einführung in C/C++" 3
Der this-PointerIn einer Member-Funktion zeigt der this-
Pointer auf das aktuelle Objekt:
struct Hamster
{
void fuettern()
{
++( this->Gewicht );
}
int Gewicht;
};
this hat den Typ Hamster *
Seminar: "Einführung in C/C++" 4
Ctors und DtorKonstruktoren: Aufruf bei Erzeugung eines
Objekts.Destruktor: Aufruf bei der Zerstörung eines
Objekts.
Konstruktor ohne Argument: „Default Ctor“
struct Hamster
{
Hamster() { }
};
Seminar: "Einführung in C/C++" 5
Ablaufplan beim Erzeugen/ZerstörenObjekt 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)
Seminar: "Einführung in C/C++" 6
Objekte kopierenEs gibt zwei Fälle, in denen Objekte kopiert
werden:
1. Initialisierung:Hamster billy;
Hamster sunny = billy;
2. Zuweisung:Hamster billy, sunny;
sunny = billy;
Seminar: "Einführung in C/C++" 7
1. Kopieren bei InitialisierungObjekte 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;
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);
Seminar: "Einführung in C/C++" 9
2. Kopieren bei ZuweisungBei 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;
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 &.
Seminar: "Einführung in C/C++" 11
Operatoren überladenMan kann fast alle Operatoren überladen.Ausnahmen (u.a.):
. (Member selection):: (Scope resolution)
Zwei Möglichkeiten:1. Durch Member-Funktion2. Durch globale Funktion
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 )
{
...
}
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)
{
...
}
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"; ... }
};
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 *}
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"
Seminar: "Einführung in C/C++" 17
StandardlibrariesStandard 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>
Top Related