17
Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ “Donnerstag” Andreas Döring [email protected] SS 2004

Einführung in die Programmiersprache C/C++

  • Upload
    airlia

  • View
    28

  • Download
    0

Embed Size (px)

DESCRIPTION

Einführung in die Programmiersprache C/C++. “Donnerstag” Andreas Döring [email protected] 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() { - PowerPoint PPT Presentation

Citation preview

Page 1: Einführung in die Programmiersprache C/C++

Seminar: "Einführung in C/C++"

Einführung in die Programmiersprache C/C++

“Donnerstag”

Andreas Dö[email protected]

SS 2004

Page 2: Einführung in die Programmiersprache C/C++

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

Page 3: Einführung in die Programmiersprache C/C++

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 *

Page 4: Einführung in die Programmiersprache C/C++

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() { }

};

Page 5: Einführung in die Programmiersprache C/C++

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)

Page 6: Einführung in die Programmiersprache C/C++

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;

Page 7: Einführung in die Programmiersprache C/C++

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;

Page 8: Einführung in die Programmiersprache C/C++

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);

Page 9: Einführung in die Programmiersprache C/C++

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;

Page 10: Einführung in die Programmiersprache C/C++

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 &.

Page 11: Einführung in die Programmiersprache C/C++

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

Page 12: Einführung in die Programmiersprache C/C++

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 )

{

...

}

Page 13: Einführung in die Programmiersprache C/C++

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)

{

...

}

Page 14: Einführung in die Programmiersprache C/C++

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"; ... }

};

Page 15: Einführung in die Programmiersprache C/C++

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 *}

Page 16: Einführung in die Programmiersprache C/C++

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"

Page 17: Einführung in die Programmiersprache C/C++

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>