Structs, Referenztypen und Const-Typen

Größe: px
Ab Seite anzeigen:

Download "Structs, Referenztypen und Const-Typen"

Transkript

1 Structs, Referenztypen und Const-Typen

2 Rechnen mit rationalen Zahlen o Rationale Zahlen (Q) sind von der Form n/d, mit n und d ausz o C++ hat keinen eingebauten Typ für rationale Zahlen

3 Rechnen mit rationalen Zahlen o Rationale Zahlen (Q) sind von der Form n/d, mit n und d ausz o C++ hat keinen eingebauten Typ für rationale Zahlen Ziel: Wir bauen uns selbst einen C++ Typ für rationale Zahlen!

4 Rechnen mit rationalen Zahlen So könnte es aussehen // Program: userational2.c // Add two rational numbers. #include <iostream> #include <IFM/rational.h> int main () { // input std::cout << "Rational number r:\n"; ifm::rational r; std::cin >> r; std::cout << "Rational number s:\n"; ifm::rational s; std::cin >> s; // computation and output std::cout << "Sum is " << r + s << ".\n"; } return 0;

5 Ein erstes Struct // Program: userational.c // Add two rational numbers. #include <iostream> // the new type rational struct rational { int n; int d; // INV: d!= 0 };...

6 Ein erstes Struct // Program: userational.c // Add two rational numbers. #include <iostream> // the new type rational struct rational { int n; int d; // INV: d!= 0 };... Ein struct definiert einen neuen Typ, dessen Wertebereich das kartesische Produkt der Wertebereiche existierender Typen ist (hier int int).

7 Ein erstes Struct // Program: userational.c // Add two rational numbers. #include <iostream> // the new type rational struct rational { int n; int d; // INV: d!= 0 }; Invariante : Spezifiziert gültige Kombinationen von Werten (informell)... Ein struct definiert einen neuen Typ, dessen Wertebereich das kartesische Produkt der Wertebereiche existierender Typen ist (hier int int).

8 Ein erstes Struct // Program: userational.c // Add two rational numbers. #include <iostream> // the new type rational struct rational { int n; int d; // INV: d!= 0 };... Ein struct definiert einen Typ, keine Variable!

9 Ein erstes Struct // Program: userational.c // Add two rational numbers. #include <iostream> // the new type rational struct rational { int n; int d; // INV: d!= 0 }; Bedeutung: jedes Objekt des neuen Typs ist durch zwei Objekte vom Typ int repräsentiert, die die Namen n und d tragen.... Ein struct definiert einen Typ, keine Variable!

10 Ein erstes Struct : Funktionalität // Program: userational.c // Add two rational numbers. #include <iostream> // the new type rational struct rational { int n; int d; // INV: d!= 0 }; // POST: return value is the sum of a and b rational add (rational a, rational b) { } rational result; result.n = a.n * b.d + a.d * b.n; result.d = a.d * b.d; return result;

11 Ein erstes Struct : Funktionalität // Program: userational.c // Add two rational numbers. #include <iostream> // the new type rational struct rational { int n; int d; // INV: d!= 0 }; // POST: return value is the sum of a and b rational add (rational a, rational b) { } rational result; result.n = a.n * b.d + a.d * b.n; result.d = a.d * b.d; return result; Mitglieds-Zugriff auf die int- Objekte von a

12 Ein erstes Struct : Funktionalität // Program: userational.c // Add two rational numbers. #include <iostream> // the new type rational struct rational { int n; int d; // INV: d!= 0 }; a + b = Zähler(a) Nenner(b) + Nenner(a) Zähler(b) Nenner(a) Nenner(b) // POST: return value is the sum of a and b rational add (rational a, rational b) { } rational result; result.n = a.n * b.d + a.d * b.n; result.d = a.d * b.d; return result;

13 Ein erstes Struct : Funktionalität // Program: userational.c // Add two rational numbers. #include <iostream> // the new type rational struct rational { int n; int d; // INV: d!= 0 }; a + b = result = Zähler(a) Nenner(b) + Nenner(a) Zähler(b) Nenner(a) Nenner(b) // POST: return value is the sum of a and b rational add (rational a, rational b) { } rational result; result.n = a.n * b.d + a.d * b.n; result.d = a.d * b.d; return result;

14 Ein erstes Struct: Funktionalität // Program: userational.c // Add two rational numbers. #include <iostream> // the new type rational struct rational { int n; int d; // INV: d!= 0 }; Der neue Typ kann wie existierende Typen benutzt werden, z.b. in Variablendeklarationen... // POST: return value is the sum of a and b rational add (rational a, rational b) { } rational result; result.n = a.n * b.d + a.d * b.n; result.d = a.d * b.d; return result;

15 Ein erstes Struct: Funktionalität // Program: userational.c // Add two rational numbers. #include <iostream> // the new type rational struct rational { int n; int d; // INV: d!= 0 }; Der neue Typ kann wie existierende Typen benutzt werden, z.b. in formalen Parameterlisten... // POST: return value is the sum of a and b rational add (rational a, rational b) { } rational result; result.n = a.n * b.d + a.d * b.n; result.d = a.d * b.d; return result;

16 Ein erstes Struct: Funktionalität // Program: userational.c // Add two rational numbers. #include <iostream> // the new type rational struct rational { int n; int d; // INV: d!= 0 }; Der neue Typ kann wie existierende Typen benutzt werden, z.b. in Rückgabetypen... // POST: return value is the sum of a and b rational add (rational a, rational b) { } rational result; result.n = a.n * b.d + a.d * b.n; result.d = a.d * b.d; return result;

17 Ein erstes Struct: Benutzung int main () { // input std::cout << "Rational number r:\n"; rational r; std::cout << " numerator =? "; std::cin >> r.n; std::cout << " denominator =? "; std::cin >> r.d; std::cout << "Rational number s:\n"; rational s; std::cout << " numerator =? "; std::cin >> s.n; std::cout << " denominator =? "; std::cin >> s.d; // computation rational t = add (r, s); // output std::cout << "Sum is " << t.n << "/" << t.d << ".\n"; } return 0;

18 Struct-Definitionen struct T { T1 name1; Name des neuen Typs (Bezeichner) T2 name2;... TN namen; }; Namen der Daten-Mitglieder (Bezeichner) Namen der zugrundeliegenden Typen

19 Struct-Definitionen struct T { T1 name1; T2 name2;... TN namen; }; Namen der zugrundeliegenden Typen Name des neuen Typs (Bezeichner) Namen der Daten-Mitglieder (Bezeichner) Wertebereich von T : T1 T2... TN

20 Struct-Definitionen: Beispiele struct rational_vector_3 { rational x; rational y; rational z; }; Die zugrundeliegenden Typen können fundamentale, aber auch benutzerdefinierte Typen sein.

21 Struct-Definitionen: Beispiele struct extended_int { // represents u if n==false and -u otherwise unsigned int u; // absolute value bool n; // sign bit }; Die zugrundeliegenden Typen können natürlich auch verschieden sein.

22 Structs: Mitglieds-Zugriff Name eines Daten-Mitglieds des Typs T expr.namek Mitglieds-Zugriff-Operator Ausdruck vom Struct-Typ T

23 Structs: Mitglieds-Zugriff Name eines Daten-Mitglieds des Typs T expr.namek Ausdruck vom Typ TK ; Wert ist der Wert des durch namek bezeichneten Objekts. Mitglieds-Zugriff-Operator Ausdruck vom Struct-Typ T

24 Structs: Initialisierung und Zuweisung Initialisierung: rational t = add (r, s);

25 Structs: Initialisierung und Zuweisung Initialisierung: rational t = add (r, s); o t wird mit dem Wert von add (r, s) initialisiert o Initialisierung erfolgt separat für jedes Daten-Mitglied

26 Structs: Initialisierung und Zuweisung Initialisierung: t.n = add (r, s).n; t.d = add (r, s).d; rational t = add (r, s); o t wird mit dem Wert von add (r, s) initialisiert o Initialisierung erfolgt separat für jedes Daten-Mitglied

27 Structs: Initialisierung und Zuweisung Default-Initialisierung: rational t; o Daten-Mitglieder von t werden defaultinitialisiert o für Daten-Mitglieder fundamentaler Typen passiert nichts (Wert undefiniert)

28 Structs: Initialisierung und Zuweisung Zuweisung: o rational t; t = add (r, s); t wird default-initialisiert o der Wert von add (r,s) wird t zugewiesen (wieder separat für jedes Daten-Mitglied)

29 Structs: Gleichheitstest? Für jeden fundamentalen Typ gibt es die Vergleichsoperatoren == und!=, aber nicht für Structs! Warum?

30 Structs: Gleichheitstest? Für jeden fundamentalen Typ gibt es die Vergleichsoperatoren == und!=, aber nicht für Structs! Warum? o Mitgliedsweiser Vergleich ergibt im allgemeinen keinen Sinn,...

31 Structs: Gleichheitstest? Für jeden fundamentalen Typ gibt es die Vergleichsoperatoren == und!=, aber nicht für Structs! Warum? o Mitgliedsweiser Vergleich ergibt im allgemeinen keinen Sinn,... o...denn dann wäre z.b. 2/3 4/6

32 Structs: Syntaktischer vs. semantischer Wertebereich o syntaktischer Wertebereich von T ist das kartesische Produkt T1 T2... TN

33 Structs: Syntaktischer vs. semantischer Wertebereich o syntaktischer Wertebereich von T ist das kartesische Produkt T1 T2... TN Typ rational: int int

34 Structs: Syntaktischer vs. semantischer Wertebereich o syntaktischer Wertebereich von T ist das kartesische Produkt T1 T2... TN o semantischer Wertebereich von T ergibt sich aus der Bedeutung eines N-Tupels (t1, t2,..., tn)

35 Structs: Syntaktischer vs. semantischer Wertebereich o syntaktischer Wertebereich von T ist das kartesische Produkt T1 T2... TN o semantischer Wertebereich von T ergibt sich aus der Bedeutung eines N-Tupels (t1, t2,..., tn) Typ rational: (n, d) bedeutet n/d

36 Structs: Syntaktischer vs. semantischer Wertebereich o syntaktischer Wertebereich von T ist das kartesische Produkt T1 T2... TN o semantischer Wertebereich von T ergibt sich aus der Bedeutung eines N-Tupels (t1, t2,..., tn) o mitgliedsweise Operationen beissen sich oft mit dem semantischen Wertebereich

37 Benutzerdefinierte Operatoren Anstatt rational t = add (r, s); würden wir lieber rational t = r + s; schreiben.

38 Benutzerdefinierte Operatoren Anstatt rational t = add (r, s); würden wir lieber rational t = r + s; schreiben. Dies geht mit Operator-Überladung.

39 Funktions- und Operator- Überladung Verschiedene Funktionen können den gleichen Namen haben.

40 Funktions- und Operator- Überladung Verschiedene Funktionen können den gleichen Namen haben. // POST: returns a * a rational square (rational a); // POST: returns a * a extended_int square (extended_int a);

41 Funktions- und Operator- Überladung Verschiedene Funktionen können den gleichen Namen haben. // POST: returns a * a rational square (rational a); // POST: returns a * a extended_int square (extended_int a); Der Compiler findet anhand der Aufrufparameter heraus, welche gemeint ist.

42 Operator-Überladung o Operatoren sind spezielle Funktionen und können auch überladen werden

43 Operator-Überladung o Operatoren sind spezielle Funktionen und können auch überladen werden o Name des Operators op : operatorop

44 Operator-Überladung o Operatoren sind spezielle Funktionen und können auch überladen werden o Name des Operators op : operatorop o wir wissen schon, dass z.b. operator+ für verschiedene Typen existiert

45 Additionsoperator für rationale Zahlen Bisher: // POST: return value is the sum of a and b rational add (rational a, rational b) { }... rational result; result.n = a.n * b.d + a.d * b.n; result.d = a.d * b.d; return result; rational t = add (r, s);

46 Additionsoperator für rationale Zahlen Neu: // POST: return value is the sum of a and b rational operator+ (rational a, rational b) { }... rational result; result.n = a.n * b.d + a.d * b.n; result.d = a.d * b.d; return result; rational t = r + s;

47 Additionsoperator für rationale Zahlen Neu: // POST: return value is the sum of a and b rational operator+ (rational a, rational b) { }... rational result; result.n = a.n * b.d + a.d * b.n; result.d = a.d * b.d; return result; rational t = r + s; Infix-Notation

48 Additionsoperator für rationale Zahlen Neu: // POST: return value is the sum of a and b rational operator+ (rational a, rational b) { }... rational result; result.n = a.n * b.d + a.d * b.n; result.d = a.d * b.d; return result; Äquivalent, aber unpraktisch: funktionale Notation rational t = operator+ (r, s);

49 Andere binäre arithmetische Operatoren für rationale Zahlen // POST: return value is the difference of a and b rational operator- (rational a, rational b); // POST: return value is the product of a and b rational operator* (rational a, rational b); // POST: return value is the quotient of a and b // PRE: b!= 0 rational operator/ (rational a, rational b);

50 Unäres Minus Hat gleiches Symbol wie binäres Minus, aber nur einen Parameter: // POST: return value is -a rational operator- (rational a) { a.n = -a.n; return a; }

51 Relationale Operatoren Sind für Structs nicht eingebaut, können aber so definiert werden, dass sie den semantischen Wertebereich respektieren. // POST: return value is true if and only if a == b bool operator== (rational a, rational b) { return a.n * b.d == a.d * b.n; }

52 Arithmetische Zuweisungen Wir wollen z.b. schreiben: rational r; r.n = 1; r.d = 2; // 1/2 rational s; s.n = 1; s.d = 3; // 1/3 r += s; std::cout << r.n << "/" << r.d << "\n"; // 5/6

53 Arithmetische Zuweisungen Wir wollen z.b. schreiben: rational r; r.n = 1; r.d = 2; // 1/2 rational s; s.n = 1; s.d = 3; // 1/3 operator+= r += s; std::cout << r.n << "/" << r.d << "\n"; // 5/6

54 Das Problem mit operator+= Erster Versuch: rational operator+= (rational a, rational b) { a.n = a.n * b.d + a.d * b.n; a.d *= b.d; return a; }

55 Das Problem mit operator+= Erster Versuch: rational operator+= (rational a, rational b) { a.n = a.n * b.d + a.d * b.n; a.d *= b.d; return a; } Das funktioniert nicht!

56 Das Problem mit operator+= Erster Versuch: rational operator+= (rational a, rational b) { } a.n = a.n * b.d + a.d * b.n; a.d *= b.d; return a; Das funktioniert nicht! Problem: Der Ausdruck r += s hat zwar den gewünschten Wert r + s, aber nicht den gewünschten Effekt der Veränderung von r, weil ein Funktionsaufruf die Werte der Aufrufparameter nicht ändert.

57 Das Problem mit operator+= o Wir müssen Funktionen in die Lage versetzen, die Werte ihrer Aufrufparameter ändern zu können!

58 Das Problem mit operator+= o Wir müssen Funktionen in die Lage versetzen, die Werte ihrer Aufrufparameter ändern zu können! o Dazu brauchen wir kein neues Konzept auf der Funktionenseite, sondern eine neue Klasse von Typen.

59 Das Problem mit operator+= o Wir müssen Funktionen in die Lage versetzen, die Werte ihrer Aufrufparameter ändern zu können! o Dazu brauchen wir kein neues Konzept auf der Funktionenseite, sondern eine neue Klasse von Typen. Referenztypen

60 Referenztypen: Definition T & gelesen als T-Referenz zugrundeliegender Typ

61 Referenztypen: Definition T & gelesen als T-Referenz zugrundeliegender Typ o T & hat gleichen Wertebereich und gleiche Funktionalität wie T,...

62 Referenztypen: Definition T & gelesen als T-Referenz zugrundeliegender Typ o T & hat gleichen Wertebereich und gleiche Funktionalität wie T,... o... nur die Initialisierungs- und Zuweisungssemantik ist anders.

63 Referenztypen: Initialisierung o Eine Variable mit Referenztyp (eine Referenz) kann nur mit einem L-Wert initialisiert werden o die Variable wird dabei ein Alias des L- Werts (ein anderer Name für das Objekt hinter dem L-Wert)

64 Referenztypen: Initialisierung und Zuweisung Beispiel: int i = 5; int& j = i; // j becomes an alias of i j = 6; // changes the value of i std::cout << i << "\n"; // outputs 6

65 Referenztypen: Initialisierung und Zuweisung Beispiel: int i = 5; int& j = i; // j becomes an alias of i j = 6; // changes the value of i std::cout << i << "\n"; // outputs 6 i Speicher 5

66 Referenztypen: Initialisierung Beispiel: int i = 5; int& j = i; // j becomes an alias of i j = 6; // changes the value of i std::cout << i << "\n"; // outputs 6 i j Speicher 5

67 Referenztypen: Zuweisung Beispiel: int i = 5; int& j = i; // j becomes an alias of i j = 6; // changes the value of i std::cout << i << "\n"; // outputs 6 i j Speicher 6

68 Referenztypen: Zuweisung Beispiel: int i = 5; int& j = i; // j becomes an alias of i j = 6; // changes the value of i std::cout << i << "\n"; // outputs 6 Zuweisung erfolgt an das Objekt hinter der Referenz i j Speicher 6

69 Referenztypen: Initialisierung und Zuweisung Beispiel: int i = 5; int& j = i; // j becomes an alias of i j = 6; // changes the value of i std::cout << i << "\n"; // outputs 6 i j Speicher 6

70 Referenztypen: Initialisierung Referenzen können auch mit Referenzen initialisiert werden: int i = 5; int& j = i; // j becomes an alias of i int& k = j; // k becomes another alias of i

71 Referenztypen: Realisierung o Intern wird ein Wert vom Typ T & durch die Adresse eines Objekts vom Typ T repräsentiert

72 Referenztypen: Realisierung o Intern wird ein Wert vom Typ T & durch die Adresse eines Objekts vom Typ T repräsentiert int& j; // error: j must be an alias of something int& k = 5; // error: the literal 5 has no address

73 Call by Reference o Referenztypen erlauben Funktionen, die Werte ihre Aufrufparameter zu ändern: void increment (int& i) { ++i; } int main () { int j = 5; increment (j); std::cout << j << "\n"; // outputs 6 } return 0;

74 Call by Reference o Referenztypen erlauben Funktionen, die Werte ihre Aufrufparameter zu ändern: void increment (int& i) { ++i; } int main () { int j = 5; increment (j); std::cout << j << "\n"; // outputs 6 j return 0; } 5

75 Call by Reference o Referenztypen erlauben Funktionen, die Werte ihre Aufrufparameter zu ändern: void increment (int& i) { ++i; } int main () { int j = 5; increment (j); std::cout << j << "\n"; // outputs 6 j return 0; } 5

76 Call by Reference o Referenztypen erlauben Funktionen, die Werte ihre Aufrufparameter zu ändern: void increment (int& i) { // i becomes alias of call parameter ++i; } Initialisierung der formalen Parameter int main () { int j = 5; increment (j); std::cout << j << "\n"; // outputs 6 j i return 0; } 5

77 Call by Reference o Referenztypen erlauben Funktionen, die Werte ihre Aufrufparameter zu ändern: void increment (int& i) { // i becomes alias of call parameter ++i; } int main () { int j = 5; increment (j); std::cout << j << "\n"; // outputs 6 j i return 0; } 6

78 Call by Reference o Referenztypen erlauben Funktionen, die Werte ihre Aufrufparameter zu ändern: void increment (int& i) { // i becomes alias of call parameter ++i; } int main () { int j = 5; increment (j); std::cout << j << "\n"; // outputs 6 j i return 0; } 6

79 Call by Value / Reference o formaler Parameter hat Referenztyp: call by reference formaler Parameter wird (intern) mit der Adresse des Aufrufparameters (L-Wert) initialisiert und wird damit zu einem Alias

80 Call by Value / Reference o formaler Parameter hat Referenztyp: call by reference formaler Parameter wird (intern) mit der Adresse des Aufrufparameters (L-Wert) initialisiert und wird damit zu einem Alias o formaler Parameter hat keinen Referenztyp: call by value formaler Parameter wird mit dem Wert des Aufrufparameters (R-Wert) initialisiert und wird damit zu einer Kopie

81 Return by Value / Reference o Auch der Rückgabetyp einer Funktion kann ein Referenztyp sein (return by reference) o In diesem Fall ist der Funktionsausfruf selbst ein L-Wert

82 Return by Value / Reference o Auch der Rückgabetyp einer Funktion kann ein Referenztyp sein (return by reference) o In diesem Fall ist der Funktionsausfruf selbst ein L-Wert int& increment (int& i) { return ++i; } exakt die Semantik des Pre-Inkrements:

83 Die Lösung für operator+= Bisher (funktioniert nicht): rational operator+= (rational a, rational b) { a.n = a.n * b.d + a.d * b.n; a.d *= b.d; return a; }

84 Die Lösung für operator+= Neu: // POST: b has been added to a; // return value is the new value of a rational& operator+= (rational& a, rational b) { } a.n = a.n * b.d + a.d * b.n; a.d *= b.d; return a; Der L-Wert a wird um den Wert von b inkrementiert und als L-Wert zurückgegeben

85 Ein-/Ausgabeoperatoren o können auch überladen werden! Bisher: std::cout << "Sum is " << t.n << "/" << t.d << "\n";

86 Ein-/Ausgabeoperatoren o können auch überladen werden! Bisher: std::cout << "Sum is " << t.n << "/" << t.d << "\n"; Neu (gewünscht): std::cout << "Sum is " << t << "\n";

87 Ein-/Ausgabeoperatoren o können auch überladen werden! Das kann wie folgt erreicht werden: // POST: a has been written to o std::ostream& operator<< (std::ostream& o, rational r) { return o << r.n << "/" << r.d; }

88 Ein-/Ausgabeoperatoren o können auch überladen werden! Das kann wie folgt erreicht werden: // POST: a has been written to o std::ostream& operator<< (std::ostream& o, rational r) { return o << r.n << "/" << r.d; } schreibt r auf den Ausgabestrom o und gibt diesen als L-Wert zurück

89 Temporäre Objekte Was ist hier falsch? int& foo (int i) { return i; }

90 Temporäre Objekte Was ist hier falsch? int& foo (int i) { return i; } Funktionswert vom Typ int& wird Alias des formalen Parameters, dessen Speicherdauer aber nach Auswertung des Funktionsausfrufes endet.

91 Temporäre Objekte Was ist hier falsch? int& foo (int i) { return i; } Funktionswert vom Typ int& wird Alias des formalen Parameters, dessen Speicherdauer aber nach Auswertung des Funktionsausfrufes endet. int i = 3; int& j = foo(i); // j refers to expired object std::cout << j << "\n"; // undefined behavior

92 Temporäre Objekte Was ist hier falsch? int& foo (int i) { return i; } Aufrufstapel int i = 3; int& j = foo(i); // j refers to expired object std::cout << j << "\n"; // undefined behavior

93 Temporäre Objekte Was ist hier falsch? int& foo (int i) { Wert des Aufrufparameters kommt auf den Aufrufstapel } return i; Aufrufstapel 3 i int i = 3; int& j = foo(i); // j refers to expired object std::cout << j << "\n"; // undefined behavior

94 Temporäre Objekte Was ist hier falsch? int& foo (int i) { return i; } i wird als Referenz zurückgegeben... Aufrufstapel 3 i int i = 3; int& j = foo(i); // j refers to expired object std::cout << j << "\n"; // undefined behavior

95 Temporäre Objekte Was ist hier falsch? int& foo (int i) { return i; }... und verschwindet vom Aufrufstapel Aufrufstapel Speicher freigegeben int i = 3; int& j = foo(i); // j refers to expired object std::cout << j << "\n"; // undefined behavior

96 Temporäre Objekte Was ist hier falsch? int& foo (int i) { return i; } j wird mit Rückgabereferenz initialisiert Aufrufstapel Speicher freigegeben j int i = 3; int& j = foo(i); // j refers to expired object std::cout << j << "\n"; // undefined behavior

97 Temporäre Objekte Was ist hier falsch? int& foo (int i) { return i; } Wert von j wird ausgegeben Aufrufstapel Speicher freigegeben j int i = 3; int& j = foo(i); // j refers to expired object std::cout << j << "\n"; // undefined behavior

98 Die Referenz-Richtlinie Wenn man eine Referenz erzeugt, muss diese mindestens so lange leben wie das Objekt, auf das sie verweist.

99 Const-Typen Vorschlag des Effizienzfanatikers: // POST: return value is the sum of a and b rational operator+ (rational& a, rational& b) { rational result; result.n = a.n * b.d + a.d * b.n; result.d = a.d * b.d; return result; }

100 Const-Typen Vorschlag des Effizienzfanatikers: // POST: return value is the sum of a and b rational operator+ (rational& a, rational& b) { } rational result; result.n = a.n * b.d + a.d * b.n; result.d = a.d * b.d; return result; Beim Aufruf muss jeweils nur eine Addresse kopiert werden anstatt zwei int s (Einsparung wird dramatisch bei grossen Structs)

101 Const-Typen Vorschlag des Effizienzfanatikers: // POST: return value is the sum of a and b rational operator+ (rational& a, rational& b) { } rational result; result.n = a.n * b.d + a.d * b.n; result.d = a.d * b.d; return result; Nachteil: Operator kann nur mit L-Werten aufgerufen werden (das kann in der konkreten Anwendung aber ausreichend sein).

102 Const-Typen Vorschlag des Effizienzfanatikers ist aber sogar gefährlich!

103 Const-Typen Vorschlag des Effizienzfanatikers ist aber sogar gefährlich! Unäres Minus: // POST: return value is -a rational operator- (rational a) { a.n = -a.n; return a; }

104 Const-Typen Vorschlag des Effizienzfanatikers ist aber sogar gefährlich! Unäres Minus: // POST: return value is -a rational operator- (rational& a) { a.n = -a.n; return a; } Vorschlag

105 Const-Typen Vorschlag des Effizienzfanatikers ist aber sogar gefährlich! Unäres Minus: // POST: return value is -a rational operator- (rational& a) { a.n = -a.n; return a; } Vorschlag Der Ausdruck a hat den gewünschten Wert, aber einen unerwünschten Effekt: der Wert von a wird verändert!

106 Const-Typen o verhindern solche unbeabsichtigten Wertänderungen (semantische Fehler), indem sie den semantischen Fehler für den Compiler erkennbar machen o machen damit das Leben des Programmierers einfacher (nicht jeder will das, siehe Real Programmers Don t Use Pascal )

107 Const-Typen: Definition const T gelesen als const-t o zugrundeliegender Typ const T hat gleichen Wertebereich und gleiche Funktionalität wie T,... o... aber Ausdrücke dieses Typs sind im Wert nicht veränderbar.

108 Const-Typen: Beispiele rational operator- (const rational& a) { a.n = -a.n; // error: a was promised to be constant return a; }

109 Const-Typen: Beispiele rational operator- (const rational& a) { a.n = -a.n; // error: a was promised to be constant return a; } const int n = 5; n = 6; // error: n was promised to be constant

110 Was genau ist konstant? Betrachte L-Wert vom Typ const T (R-Werte sind ohnehin konstant) o Fall 1: T ist kein Referenztyp

111 Was genau ist konstant? Betrachte L-Wert vom Typ const T (R-Werte sind ohnehin konstant) o Fall 1: T ist kein Referenztyp Dann verweist der L-Wert auf ein konstantes Objekt. const int n = 5; int& i = n; // error: const-qualification is discarded i = 6;

112 Was genau ist konstant? Betrachte L-Wert vom Typ const T (R-Werte sind ohnehin konstant) o Fall 1: T ist kein Referenztyp Dann verweist der L-Wert auf ein konstantes Objekt. const int n = 5; int& i = n; // error: const-qualification is discarded i = 6; Schummelversuch wird vom Compiler erkannt!

113 Was genau ist konstant? Betrachte L-Wert vom Typ const T (R-Werte sind ohnehin konstant) o Fall 2: T ist Referenztyp Dann verweist der L-Wert auf ein Objekt, dessen Wert zwar veränderbar ist, aber nicht durch diesen Alias.

114 Was genau ist konstant? Betrachte L-Wert vom Typ const T (R-Werte sind ohnehin konstant) o Fall 2: T ist Referenztyp int n = 5; Dann verweist der L-Wert auf ein Objekt, dessen Wert zwar veränderbar ist, aber nicht durch diesen L-Wert. const int& i = n; // i becomes a non-modifiable alias of n int& j = n; // j becomes a modifiable alias of n i = 6; // error: n is modified through const reference j = 6; // ok: n receives value 6

115 Const-Referenzen o haben Typ const T & (= const (T & )) o können auch mit R-Werten initialisiert werden (Compiler erzeugt temporäres Objekt ausreichender Lebensdauer)

116 Const-Referenzen o haben Typ const T & (= const (T & )) o können auch mit R-Werten initialisiert werden (Compiler erzeugt temporäres Objekt ausreichender Lebensdauer) o sind die eierlegende Wollmilchsau: const T & r = lvalue ; r wird mit Adresse von lvalue initialisert (effizient)

117 Const-Referenzen o haben Typ const T & (= const (T & )) o können auch mit R-Werten initialisiert werden (Compiler erzeugt temporäres Objekt ausreichender Lebensdauer) o sind die eierlegende Wollmilchsau: const T & r = rvalue ; r wird mit Adresse eines temporären Objekts vom Wert des rvalue initialisert (flexibel)

118 Const-Referenzen o sichere Version von operator+ mit Const-Referenzen: // POST: return value is the sum of a and b rational operator+ (const rational& a, const rational& b) { } rational result; result.n = a.n * b.d + a.d * b.n; result.d = a.d * b.d; return result;

119 Const-Referenzen o sichere Version von operator+ mit Const-Referenzen: // POST: return value is the sum of a and b rational operator+ (const rational& a, const rational& b) { } rational result; result.n = a.n * b.d + a.d * b.n; result.d = a.d * b.d; return result; Bemerkung: T kann als Parametertyp oft durch const T & ersetzt werden; dies lohnt sich aber nicht für fundamentale Typen oder kleine Structs.

120 Rückgabe von Const-Referenzen o Erseten von T durch const T & ist meistens nicht gut bei Rückgabetypen Korrekte Version: rational operator+ (const rational& a, const rational& b) { } rational result; result.n = a.n * b.d + a.d * b.n; result.d = a.d * b.d; return result;

121 Rückgabe von Const-Referenzen o Erseten von T durch const T & ist meistens nicht gut bei Rückgabetypen Inkorrekte Version: const rational& operator+ (const rational& a, const rational& b) { } rational result; result.n = a.n * b.d + a.d * b.n; result.d = a.d * b.d; return result;

122 Rückgabe von Const-Referenzen o Erseten von T durch const T & ist meistens nicht gut bei Rückgabetypen Inkorrekte Version: const rational& operator+ (const rational& a, const rational& b) { } rational result; result.n = a.n * b.d + a.d * b.n; result.d = a.d * b.d; return result; Hier wird Referenz auf ein temporäres Objekt zurückgegeben

123 Die Const-Richtlinie Benutze const, wann immer es geht (Sicherheit) und einen Unterschied macht! o es macht immer einen Unterschied bei Referenztypen

124 Die Const-Richtlinie Benutze const, wann immer es geht (Sicherheit) und einen Unterschied macht! o es macht immer einen Unterschied bei Referenztypen const T & erlaubt R-Wert-Initialisierung, T & nicht

125 Die Const-Richtlinie Benutze const, wann immer es geht (Sicherheit) und einen Unterschied macht! o es macht immer einen Unterschied bei Referenztypen o andernfalls macht es einen Unterschied bei Variablen, deren Gültigkeitsbereich mehr als 10 Zeilen umfasst

Lindenmayer-Systeme: Fraktale rekursiv zeichnen. Definition. Definition. Definition. o Alphabet Σ ( Beispiel: {F, +, -} )

Lindenmayer-Systeme: Fraktale rekursiv zeichnen. Definition. Definition. Definition. o Alphabet Σ ( Beispiel: {F, +, -} ) Fraktale rekursiv zeichnen Definition o Alphabet Σ ( Beispiel: F, +, - ) Definition o Alphabet Σ ( Beispiel: F, +, - ) o Σ * = Menge aller endlichen Wörter über Σ ( Beispiel: F+F+ ist in Σ * ) Definition

Mehr

Lindenmayer-Systeme: Fraktale rekursiv zeichnen

Lindenmayer-Systeme: Fraktale rekursiv zeichnen Lindenmayer-Systeme: Fraktale rekursiv zeichnen Lindenmayer-Systeme: Definition o Alphabet Σ ( Beispiel: {F, +, -} ) Lindenmayer-Systeme: Definition o Alphabet Σ ( Beispiel: {F, +, -} ) o Σ * = Menge aller

Mehr

Temporäre Objekte. Referenztypen (II) und Const- Typen. Temporäre Objekte. Temporäre Objekte. Was ist hier falsch? Was ist hier falsch?

Temporäre Objekte. Referenztypen (II) und Const- Typen. Temporäre Objekte. Temporäre Objekte. Was ist hier falsch? Was ist hier falsch? Referenztypen (II) und Const- Typen Temporäre Objekte Was ist hier falsch? int& foo (int i) return i; Temporäre Objekte Was ist hier falsch? Temporäre Objekte Was ist hier falsch? int& foo (int i) return

Mehr

Referenztypen (II) und Const- Referenzen. Temporäre Objekte, Const- Referenzen, was genau ist konstant?

Referenztypen (II) und Const- Referenzen. Temporäre Objekte, Const- Referenzen, was genau ist konstant? Referenztypen (II) und Const- Referenzen Temporäre Objekte, Const- Referenzen, was genau ist konstant? Temporäre Objekte Was ist hier falsch? int& foo (int i) { } return i; Temporäre Objekte Was ist hier

Mehr

Dynamische Datentypen

Dynamische Datentypen Dynamische Datentypen Tupel und Folgen o Wertebereich eines Structs / einer Klasse: T1 T2... Tk Werte sind k-tupel Tupel und Folgen o Wertebereich eines Structs / einer Klasse: T1 T2... Tk Werte sind k-tupel

Mehr

Die erste C++ Funktion

Die erste C++ Funktion Die erste C++ Funktion Funktion zur Potenzberechnung // PRE: e >= 0 b!= 0.0 // POST: return value is b^e double pow (double b, int e) { double result = 1.0; if (e < 0) { // b^e = (1/b)^(-e) b = 1.0/b;

Mehr

Ganze Zahlen. Die Typen int, unsigned int; Auswertung arithmetischer Ausdrücke, arithmetische Operatoren

Ganze Zahlen. Die Typen int, unsigned int; Auswertung arithmetischer Ausdrücke, arithmetische Operatoren Ganze Zahlen Die Typen int, unsigned int; Auswertung arithmetischer Ausdrücke, arithmetische Operatoren Celsius to Fahrenheit // Program: fahrenheit.cpp // Convert temperatures from Celsius to Fahrenheit.

Mehr

Visuelle Kryptographie. Anwendung von Zufallszahlen

Visuelle Kryptographie. Anwendung von Zufallszahlen Visuelle Kryptographie Anwendung von Zufallszahlen Verschlüsseln eines Bildes Wir wollen ein Bild an Alice und Bob schicken, so dass Verschlüsseln eines Bildes Wir wollen ein Bild an Alice und Bob schicken,

Mehr

Ganze Zahlen. Die Typen int, unsigned int; Auswertung arithmetischer Ausdrücke, arithmetische Operatoren

Ganze Zahlen. Die Typen int, unsigned int; Auswertung arithmetischer Ausdrücke, arithmetische Operatoren Ganze Zahlen Die Typen int, unsigned int; Auswertung arithmetischer Ausdrücke, arithmetische Operatoren Celsius to Fahrenheit // Program: fahrenheit.cpp // Convert temperatures from Celsius to Fahrenheit.

Mehr

2. Ganze Zahlen int unsigned int

2. Ganze Zahlen int unsigned int 99 2. Ganze Zahlen Auswertung arithmetischer Ausdrücke, Assoziativität und Präzedenz, arithmetische Operatoren, Wertebereich der Typen int, unsigned int Celsius to Fahrenheit // Program: fahrenheit.cpp

Mehr

Das erste C++ Programm

Das erste C++ Programm Das erste C++ Programm // Program: power8.c // Raise a number to the eighth power. #include int main() { // input std::cout > a; // computation int

Mehr

1. Ganze Zahlen. 9 * celsius / Celsius to Fahrenheit. (9 * celsius / 5) + 32

1. Ganze Zahlen. 9 * celsius / Celsius to Fahrenheit. (9 * celsius / 5) + 32 1. Ganze Zahlen Auswertung arithmetischer Ausdrücke, Assoziativität und Präzedenz, arithmetische Operatoren, Wertebereich der Typen int, unsigned int 1 Celsius to Fahrenheit // Program: fahrenheit.cpp

Mehr

2. Ganze Zahlen. Auswertung arithmetischer Ausdrücke, Assoziativität und Präzedenz, arithmetische Operatoren, Wertebereich der Typen int, unsigned int

2. Ganze Zahlen. Auswertung arithmetischer Ausdrücke, Assoziativität und Präzedenz, arithmetische Operatoren, Wertebereich der Typen int, unsigned int 74 2. Ganze Zahlen Auswertung arithmetischer Ausdrücke, Assoziativität und Präzedenz, arithmetische Operatoren, Wertebereich der Typen int, unsigned int Celsius to Fahrenheit 75 // Program: fahrenheit.cpp

Mehr

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes Verschlüsseln eines Bildes Visuelle Kryptographie Anwendung von Zufallszahlen Wir wollen ein Bild an Alice und Bob schicken, so dass Alice allein keine Information über das Bild bekommt Bob allein keine

Mehr

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder

Mehr

Felder (Arrays) und Zeiger (Pointers) - Teil I

Felder (Arrays) und Zeiger (Pointers) - Teil I Felder (Arrays) und Zeiger (Pointers) - Teil I Feldtypen, Sieb des Eratosthenes, Iteration, Zeigertypen, Zeigerarithmetik, dynamische Speicherverwaltung Felder: Motivation n Wir können jetzt über Zahlen

Mehr

Was Mathematiker schon vor Jahrhunderten erfunden haben, gibt es jetzt endlich in ihrer Programmiersprache:

Was Mathematiker schon vor Jahrhunderten erfunden haben, gibt es jetzt endlich in ihrer Programmiersprache: Kapitel 8 Operatoren Was Mathematiker schon vor Jahrhunderten erfunden haben, gibt es jetzt endlich in ihrer Programmiersprache: Operatoren definieren Es ist in C++ möglich, Operatoren wie +, oder für

Mehr

Programmieren in C++ Überladen von Methoden und Operatoren

Programmieren in C++ Überladen von Methoden und Operatoren Programmieren in C++ Überladen von Methoden und Operatoren Inhalt Überladen von Methoden Überladen von Operatoren Implizite und explizite Konvertierungsoperatoren 7-2 Überladen von Methoden Signatur einer

Mehr

10. Referenztypen. Referenztypen: Definition und Initialisierung, Call By Value, Call by Reference, Temporäre Objekte

10. Referenztypen. Referenztypen: Definition und Initialisierung, Call By Value, Call by Reference, Temporäre Objekte 288 10. Referenztypen Referenztypen: Definition und Initialisierung, Call By Value, Call by Reference, Temporäre Objekte Swap! // POST: values of x and y are exchanged void swap (int& x, int& y) { int

Mehr

Felder (Arrays) und Zeiger (Pointers) - Teil I

Felder (Arrays) und Zeiger (Pointers) - Teil I Felder (Arrays) und Zeiger (Pointers) - Teil I Felder: Motivation Wir können jetzt über Zahlen iterieren: for (int i=0; i

Mehr

6. Fliesskommazahlen II. Fliesskommazahlensysteme; IEEE Standard; Grenzen der Fliesskommaarithmetik; Fliesskomma-Richtlinien; Harmonische Zahlen

6. Fliesskommazahlen II. Fliesskommazahlensysteme; IEEE Standard; Grenzen der Fliesskommaarithmetik; Fliesskomma-Richtlinien; Harmonische Zahlen 163 6. Fliesskommazahlen II Fliesskommazahlensysteme; IEEE Standard; Grenzen der Fliesskommaarithmetik; Fliesskomma-Richtlinien; Harmonische Zahlen Fliesskommazahlensysteme 164 Ein Fliesskommazahlensystem

Mehr

o Alphabet Σ ( Beispiel: {F, +, -} ) o P: Σ -> Σ * eine Produktion o w 0 = F o w 1 = F+F+ o w 2 = F+F++F+F++ o w 3 = F+F++F+F+++F+F++F+F+++ o...

o Alphabet Σ ( Beispiel: {F, +, -} ) o P: Σ -> Σ * eine Produktion o w 0 = F o w 1 = F+F+ o w 2 = F+F++F+F++ o w 3 = F+F++F+F+++F+F++F+F+++ o... Fraktale rekursv zechnen Defnton o Alphabet Σ ( Bespel: F, +, - ) o Σ * = Menge aller endlchen Wörter über Σ ( Bespel: F+F+ st n Σ * ) o P: Σ -> Σ * ene Produkton Bespel: P(F) = F+F+ P(+) = + P(- ) = -

Mehr

Informatik 1 ( ) D-MAVT F2010. Schleifen, Felder. Yves Brise Übungsstunde 5

Informatik 1 ( ) D-MAVT F2010. Schleifen, Felder. Yves Brise Übungsstunde 5 Informatik 1 (251-0832-00) D-MAVT F2010 Schleifen, Felder Nachbesprechung Blatt 3 Aufgabe 1 ASCII... A > a Vorsicht: Lösen Sie sich von intuitiven Schlussfolgerungen. A ist nicht grösser als a, denn in

Mehr

Datenkapselung: Motivation

Datenkapselung: Motivation Klassen Datenkapselung: Motivation Erinnern wir uns: struct rational { }; int n; int d; // INV: d!= 0 neuer Typ für rationale Zahlen... Datenkapselung: Motivation Erinnern wir uns: struct rational { };

Mehr

Die Mersenne sche Vermutung. Einführung. Der Vortrag von Cole. Die Mersenne sche Vermutung

Die Mersenne sche Vermutung. Einführung. Der Vortrag von Cole. Die Mersenne sche Vermutung Die Mersenne sche Vermutung Einführung Die Mersenne sche Vermutung, Editor, Compiler, Computer, Betriebssystem, Plattform, Das erste C++-Programm Mersenne (1644): Die Zahlen der Form 2 n -1 sind Primzahlen

Mehr

C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16

C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16 C++ Teil 4 Sven Groß IGPM, RWTH Aachen 30. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 4 30. Apr 2015 1 / 16 Themen der letzten Vorlesung Funktionen: Definition und Aufruf Wert- und Referenzparameter,

Mehr

Container für eine Folge gleichartiger Daten. Dynamische Datentypen. Probleme mit Feldern...aber nicht mit std::vector. ... und auch std::vector

Container für eine Folge gleichartiger Daten. Dynamische Datentypen. Probleme mit Feldern...aber nicht mit std::vector. ... und auch std::vector // Container für eine Folge gleichartiger Daten Dynamische Datentyen Listen; Funktionalität, Coy- Konstruktor, Zuweisungsoerator,, Konzet Dynamischer Datenty n Bisher: Felder (T[],std::array, std::vector)

Mehr

3. Wahrheitswerte. Boolesche Funktionen; der Typ bool; logische und relationale Operatoren; Kurzschlussauswertung; Assertions und Konstanten

3. Wahrheitswerte. Boolesche Funktionen; der Typ bool; logische und relationale Operatoren; Kurzschlussauswertung; Assertions und Konstanten 114 3. Wahrheitswerte Boolesche Funktionen; der Typ bool; logische und relationale Operatoren; Kurzschlussauswertung; Assertions und Konstanten Wo wollen wir hin? 115 int a; std::cin >> a; if (a % 2 ==

Mehr

F Zeiger, Felder und Strukturen in C

F Zeiger, Felder und Strukturen in C F Zeiger, Felder und Strukturen in C F Zeiger, Felder und Strukturen in C F.1 Zeiger(-Variablen) 1 Einordnung Konstante: Bezeichnung für einen Wert a 0110 0001 Variable: Bezeichnung eines Datenobjekts

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Funktionen Rückblick Operatoren logische Verknüpfungen Zusammengesetzte Operatoren ( Zuweisungsoperatoren ) Kontrollstrukturen Bedingte Anweisungen (if-abfrage, switch-konstrukt)

Mehr

7. Fliesskommazahlen II. Fliesskommazahlensysteme; IEEE Standard; Grenzen der Fliesskommaarithmetik; Fliesskomma-Richtlinien; Harmonische Zahlen

7. Fliesskommazahlen II. Fliesskommazahlensysteme; IEEE Standard; Grenzen der Fliesskommaarithmetik; Fliesskomma-Richtlinien; Harmonische Zahlen 238 7. Fliesskommazahlen II Fliesskommazahlensysteme; IEEE Standard; Grenzen der Fliesskommaarithmetik; Fliesskomma-Richtlinien; Harmonische Zahlen 239 Fliesskommazahlensysteme Ein Fliesskommazahlensystem

Mehr

VDK-Informatik

VDK-Informatik Florian Andritsch 7. Juli 2010 1 / 16 Übersicht Heute: Mittwoch Themen, Dynamische Arrays, Wiederholung Funktionen-Arrays- Rekursionen, Structs 2 / 16 Übersicht Was gabs gestern? Themen double, float Konversion

Mehr

Unterlagen. CPP-Uebungen-08/

Unterlagen.  CPP-Uebungen-08/ Unterlagen http://projects.eml.org/bcb/people/ralph/ CPP-Uebungen-08/ http://www.katjawegner.de/lectures.html Kommentare in C++ #include /* Dies ist ein langer Kommentar, der über zwei Zeilen

Mehr

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke Institut für Programmierung und Reaktive Systeme Java 6 Markus Reschke 13.10.2014 OOP Objekte = Verhalten (durch Methoden) + Daten (durch Attribute) Klassen = Baupläne für Objekte Kapselung von Programmteilen

Mehr

8. Referenzen und Zeiger

8. Referenzen und Zeiger 8. Referenzen und Zeiger Motivation Variable werden in C++ an speziellen Positionen im Speicher abgelegt. An jeder Position befindet sich 1 Byte. Sie sind durchnummeriert beginnend bei 0. Diese Positionen

Mehr

Programmierkurs C/C++

Programmierkurs C/C++ Blockkurs: "Einführung in C/C++" Programmierkurs C/C++ Freitag Sandro Andreotti andreott@inf.fu-berlin.de WS 2008/09 1 Blockkurs: "Einführung in C/C++" 2 Vererbung Klassen erben die Member von Basisklassen:

Mehr

Einführung. Die Mersenne sche Vermutung, Editor, Compiler, Computer, Betriebssystem, Plattform, Das erste C++-Programm

Einführung. Die Mersenne sche Vermutung, Editor, Compiler, Computer, Betriebssystem, Plattform, Das erste C++-Programm Einführung Die Mersenne sche Vermutung, Editor, Compiler, Computer, Betriebssystem, Plattform, Das erste C++-Programm Real Programmers vs. Quiche Eaters The Real Programmer ist intuitiver Programmierer

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Tafelübung 03 Vererbung, Polymorphie, Sichtbarkeit, Interfaces Clemens Lang T2 11. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/26 Klassen und Objekte Klassen und Objekte

Mehr

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Einführung in den Einsatz von Objekt-Orientierung mit C++ I Einführung in den Einsatz von Objekt-Orientierung mit C++ I ADV-Seminar Leiter: Mag. Michael Hahsler Syntax von C++ Grundlagen Übersetzung Formale Syntaxüberprüfung Ausgabe/Eingabe Funktion main() Variablen

Mehr

Vorkurs Informatik: Erste Schritte der Programmierung mit C++

Vorkurs Informatik: Erste Schritte der Programmierung mit C++ Vorkurs Informatik WS 14/15 Vorkurs Informatik: Erste Schritte der Programmierung mit C++ Arne Nägel, Andreas Vogel, Gabriel Wittum Lehrstuhl Modellierung und Simulation Goethe-Center for Scientific Computing

Mehr

Grundlagen der Informatik 6. Arrays I

Grundlagen der Informatik 6. Arrays I 6. Arrays I Motivation Array (konstante Länge) Speicherbereich Eingabe von Arrays Grundlagen der Informatik (Alex Rempel) 1 Motivation Beispiel: Bildschirmpixel zeichnen Auflösung 800x600, d.h. insgesamt

Mehr

Algorithmen & Programmierung. Ausdrücke & Operatoren (1)

Algorithmen & Programmierung. Ausdrücke & Operatoren (1) Algorithmen & Programmierung Ausdrücke & Operatoren (1) Ausdrücke Was ist ein Ausdruck? Literal Variable Funktionsaufruf Ausdruck, der durch Anwendung eines einstelligen (unären) Operators auf einen Ausdruck

Mehr

Einführung. Programmieren, Die Mersenne sche Vermutung, Editor, Compiler, Computer, Betriebssystem, Plattform, Das erste C++ Programm

Einführung. Programmieren, Die Mersenne sche Vermutung, Editor, Compiler, Computer, Betriebssystem, Plattform, Das erste C++ Programm Einführung Programmieren, Die Mersenne sche Vermutung, Editor, Compiler, Computer, Betriebssystem, Plattform, Das erste C++ Programm 1 Programmieren heisst... n... dem Computer mit Hilfe einer Programmiersprache

Mehr

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter}); S. d. I.: Programieren in C Folie 7-1 7 Funktionen 7.1 Definition Prototyp-Syntax: Speicherklasse Typ Name (formale Parameter); der Funktions-Prototyp deklariert eine Funktion, d.h. er enthält noch nicht

Mehr

Felder: Motivation. Felder (Arrays) und Zeiger (Pointers) - Teil I. Felder: erste Anwendung. Felder: erste Anwendung

Felder: Motivation. Felder (Arrays) und Zeiger (Pointers) - Teil I. Felder: erste Anwendung. Felder: erste Anwendung Felder (Arrays) und Zeiger (Pointers) - Teil I Felder: Motivation Wir können jetzt über Zahlen iterieren: for (int i=; i

Mehr

Einführung in die Programmierung Wintersemester 2016/17

Einführung in die Programmierung Wintersemester 2016/17 Einführung in die Programmierung Wintersemester 2016/17 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Gültigkeitsbereiche Inhalt Lokale und globale

Mehr

Die Sprache C# Datentypen, Speicherverwaltung Grundelemente der Sprache. Dr. Beatrice Amrhein

Die Sprache C# Datentypen, Speicherverwaltung Grundelemente der Sprache. Dr. Beatrice Amrhein Die Sprache C# Datentypen, Speicherverwaltung Grundelemente der Sprache Dr. Beatrice Amrhein Überblick Speicherverwaltung: Stack und Heap Ein- und Ausgabe über die Console Variablen und Operatoren Parameter

Mehr

Mathematische Rekursion

Mathematische Rekursion Rekursion Mathematische Rekursion o Viele mathematische Funktionen sind sehr natürlich rekursiv definierbar, d.h. o die Funktion erscheint in ihrer eigenen Definition. Mathematische Rekursion o Viele mathematische

Mehr

Celsius to Fahrenheit. Ganze Zahlen. Assoziativität und Präzedenz. 9 * celsius / Assoziativität und Präzedenz. Assoziativität und Präzedenz

Celsius to Fahrenheit. Ganze Zahlen. Assoziativität und Präzedenz. 9 * celsius / Assoziativität und Präzedenz. Assoziativität und Präzedenz Celsius t Fahrenheit Ganze Zahlen Die Typen int, unsigned int; Auswertung arithmetischer Ausdrücke, arithmetische Operatren // Prgram: fahrenheit.cpp // Cnvert temperatures frm Celsius t Fahrenheit. #include

Mehr

Praxisorientierte Einführung in C++ Lektion: "Das Schlüsselwort explicit"

Praxisorientierte Einführung in C++ Lektion: Das Schlüsselwort explicit Praxisorientierte Einführung in C++ Lektion: "Das Schlüsselwort explicit" Christof Elbrechter Neuroinformatics Group, CITEC April 24, 2014 Christof Elbrechter Praxisorientierte Einführung in C++ April

Mehr

C-Programmierung: Ausdrücke und Operatoren#Division.2F

C-Programmierung: Ausdrücke und Operatoren#Division.2F C-Programmierung: Ausdrücke und Operatoren#Division.2F http://de.wikibooks.org/wiki/c-programmierung:_ausdrücke_und_operatoren#division_.2f This Book Is Generated By Wb2PDF using RenderX XEP, XML to PDF

Mehr

Variablen in C++ Einfache Variablen Strukturen Arrays und Zeichenketten Zeiger und Referenzen Parameter Dynamische Speicherverwaltung

Variablen in C++ Einfache Variablen Strukturen Arrays und Zeichenketten Zeiger und Referenzen Parameter Dynamische Speicherverwaltung Variablen in C++ Einfache Variablen Strukturen Arrays und Zeichenketten Zeiger und Referenzen Parameter Dynamische Speicherverwaltung Einfache Variablen Typen int, long, short, unsigned bool char float,

Mehr

Programmier-Befehle - Woche 10

Programmier-Befehle - Woche 10 Funktionen Rekursion Selbstaufruf einer Funktion Jeder rekursive Funktionsaufruf hat seine eigenen, unabhängigen Variablen und Argumente. Dies kann man sich sehr gut anhand des in der Vorlesung gezeigten

Mehr

Konstruktor/Destruktor

Konstruktor/Destruktor 1/23 Konstruktor/Destruktor Florian Adamsky, B. Sc. (PhD cand.) florian.adamsky@iem.thm.de http://florian.adamsky.it/ cbd Softwareentwicklung im WS 2014/15 2/23 Outline 1 2 3/23 Inhaltsverzeichnis 1 2

Mehr

5.3 Auswertung von Ausdrücken

5.3 Auswertung von Ausdrücken 5.3 Auswertung von Ausdrücken Funktionen in Java bekommen Parameter/Argumente als Input, und liefern als Output den Wert eines vorbestimmten Typs. Zum Beispiel könnte man eine Funktion i n t min ( i n

Mehr

6. Funktionen, Parameterübergabe

6. Funktionen, Parameterübergabe 6. Funktionen, Parameterübergabe GPS-6-1 Themen dieses Kapitels: Begriffe zu Funktionen und Aufrufen Parameterübergabearten call-by-value, call-by-reference, call-by-value-and-result in verschiedenen Sprachen

Mehr

Deklarationen in C. Prof. Dr. Margarita Esponda

Deklarationen in C. Prof. Dr. Margarita Esponda Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.

Mehr

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja Aue

Mehr

Bereits behandelt: Einfache Datentypen / Variablen. Schleifen und Verzweigungen. Funktionen. Heute: Felder, Zeiger, Referenzen. Freispeicherverwaltung

Bereits behandelt: Einfache Datentypen / Variablen. Schleifen und Verzweigungen. Funktionen. Heute: Felder, Zeiger, Referenzen. Freispeicherverwaltung Kompaktkurs C++ Themen C 1 Bereits behandelt: Einfache Datentypen / Variablen Schleifen und Verzweigungen Funktionen Heute: Felder, Zeiger, Referenzen Freispeicherverwaltung Zeichenketten Kommandozeilenargumente

Mehr

Crashkurs C++ Wiederholung

Crashkurs C++ Wiederholung Crashkurs C++ Wiederholung #include int main(void) { int i, j; bool is_prime; for (j = 1; j < 1000; j += 2) { is_prime = true; for (i = 3; i

Mehr

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl Funktionen Zusammenfassung von Befehlssequenzen als aufrufbare/wiederverwendbare Funktionen in einem Programmblock mit festgelegter Schnittstelle (Signatur) Derartige prozedurale Programmierung erlaubt

Mehr

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 1. Teil 11. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches

Mehr

Typ : void* aktuelle Parameter Pointer von beliebigem Typ

Typ : void* aktuelle Parameter Pointer von beliebigem Typ 2. Funktionen - Prototypvereinbarung typangabe funktionsname(parameterliste); - Funktionsdefinition typ funktionsname(parameterliste){ Anweisung - Funktionstyp -> Typ der Funktionswertes zulaessige Typangaben

Mehr

Einführung in die Programmierung II. 5. Zeiger

Einführung in die Programmierung II. 5. Zeiger Einführung in die Programmierung II 5. Zeiger Thomas Huckle, Stefan Zimmer 16. 5. 2007-1- Bezüge als Objekte Bisher kennen wir als Bezüge (Lvalues) nur Variablennamen Jetzt kommt eine neue Sorte dazu,

Mehr

Betriebssysteme, Rechnernetze und verteilte Systeme 1. Crashkurs C (2)

Betriebssysteme, Rechnernetze und verteilte Systeme 1. Crashkurs C (2) Betriebssysteme, Rechnernetze und verteilte Systeme 1 Crashkurs C (2) Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/teaching/ss2008/bsrvs1/

Mehr

C++ - Objektorientierte Programmierung Konstante und statische Elemente

C++ - Objektorientierte Programmierung Konstante und statische Elemente C++ - Objektorientierte Programmierung Konstante und statische Elemente hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja

Mehr

C++ - Funktionen und mehr -

C++ - Funktionen und mehr - C++ - Funktionen und mehr - Friedrich-Schiller-Universität Jena Kerstin Gößner und Ralf Wondratschek Prof. Dr. habil. Wolfram Amme Dipl.-Inf. Thomas Heinze Inhaltsverzeichnis 1 Einleitung 3 2 Deklaration,

Mehr

Intuitive Einführung. Informatik B Objektorientierte Programmierung in Java. Vorlesung 01: Objektorientierte Programmierung (Teil 1)

Intuitive Einführung. Informatik B Objektorientierte Programmierung in Java. Vorlesung 01: Objektorientierte Programmierung (Teil 1) Universität Osnabrück 1 3 Objektorientierte Programmierung in Java Klasse Objekt Attribut Operation Botschaft Vererbung Assoziation Vorlesung 01: Objektorientierte Programmierung (Teil 1) SS 2004 Prof.

Mehr

Zeiger & Co. Verwendung und Zeigerarithme5k. thorsten möller - informa5k.unibas.ch/lehre/fs13/cs109/03- c++- zeiger.pdf. Strukturen. enum.

Zeiger & Co. Verwendung und Zeigerarithme5k. thorsten möller - informa5k.unibas.ch/lehre/fs13/cs109/03- c++- zeiger.pdf. Strukturen. enum. K03 Zeiger & Co 1. Zeiger Verwendung und Zeigerarithme5k 2. Referenzen 3. Arrays 4. Zeigertabellen 2 Wiederholung: Das Typsystem in C++ Elementare Datentypen Strukturen Adressen enum struct union class

Mehr

19. Vererbung und Polymorphie

19. Vererbung und Polymorphie 667 19. Vererbung und Polymorphie Ausdrucksbäume, Vererbung, Code-Wiederverwendung, virtuelle Funktionen, Polymorphie, Konzepte des objektorientierten Programmierens (Ausdrucks-)Bäume -(3-(4-5))*(3+4*5)/6

Mehr

einlesen n > 0? Ausgabe Negative Zahl

einlesen n > 0? Ausgabe Negative Zahl 1 Lösungen Kapitel 1 Aufgabe 1.1: Nassi-Shneiderman-Diagramm quadratzahlen Vervollständigen Sie das unten angegebene Nassi-Shneiderman-Diagramm für ein Programm, welches in einer (äußeren) Schleife Integer-Zahlen

Mehr

Grundlagen der Informatik 8. Funktionen I

Grundlagen der Informatik 8. Funktionen I 8. Funktionen I Motivation Grundlagen Parameterübergabe Struktogramme Grundlagen der Informatik (Alex Rempel) 1 Motivation Funktionen sind Mittel der Programmstrukturierung Modularisierung Aufteilung in

Mehr

Grundlagen der OO- Programmierung in C#

Grundlagen der OO- Programmierung in C# Grundlagen der OO- Programmierung in C# Technische Grundlagen 1 Dr. Beatrice Amrhein Überblick Visual Studio: Editor und Debugging Die Datentypen Methoden in C# Die Speicherverwaltung 2 Visual Studio 3

Mehr

Prüfung Informatik D-MATH/D-PHYS :00 11:00

Prüfung Informatik D-MATH/D-PHYS :00 11:00 Prüfung Informatik D-MATH/D-PHYS 24. 1. 2014 09:00 11:00 Prof. Bernd Gartner Kandidat/in: Name:... Vorname:... Stud.-Nr.:... Ich bezeuge mit meiner Unterschrift dass ich die Prufung unter regularen Bedingungen

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2010/11 Lokale und globale Variablen Namensräume Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund

Mehr

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22 C++ Teil 2 Sven Groß IGPM, RWTH Aachen 16. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 2 16. Apr 2015 1 / 22 Themen der letzten Vorlesung Hallo Welt Elementare Datentypen Ein-/Ausgabe Operatoren Sven

Mehr

Kurze Einführung in die Programmiersprache C++ und in Root

Kurze Einführung in die Programmiersprache C++ und in Root Kurze Einführung in die Programmiersprache C++ und in Root Statistik, Datenanalyse und Simulation; 31.10.2006 Inhalt 1 Einführung in die Programmiersprache C++ Allgemeines Variablen Funktionen 2 1 Einführung

Mehr

Objektorientiertes Programmieren für Ingenieure

Objektorientiertes Programmieren für Ingenieure Uwe Probst Objektorientiertes Programmieren für Ingenieure Anwendungen und Beispiele in C++ 18 2 Von C zu C++ 2.2.2 Referenzen und Funktionen Referenzen als Funktionsparameter Liefert eine Funktion einen

Mehr

Algorithmen zur Datenanalyse in C++

Algorithmen zur Datenanalyse in C++ Algorithmen zur Datenanalyse in C++ Hartmut Stadie 11.06.2012 Algorithmen zur Datenanalyse in C++ Hartmut Stadie 1/ 28 Einführung Klassen Übung Algorithmen zur Datenanalyse in C++ Hartmut Stadie 2/ 28

Mehr

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

Einführung in die C++ Programmierung für Ingenieure Einführung in die C++ Programmierung für Ingenieure MATTHIAS WALTER / JENS KLUNKER Universität Rostock, Lehrstuhl für Modellierung und Simulation 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK FACULTY OF

Mehr

C++ Teil 9. Sven Groß. 17. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil Juni / 17

C++ Teil 9. Sven Groß. 17. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil Juni / 17 C++ Teil 9 Sven Groß 17. Juni 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 9 17. Juni 2016 1 / 17 Themen der letzten Vorlesung Objektorientierung und Klassen Attribute / Datenelemente Methoden / Elementfunktionen

Mehr

Grundlagen der Programmierung in C Funktionen

Grundlagen der Programmierung in C Funktionen Der erste Mechanismus für Code-Reuse! Grundlagen der Programmierung in C Funktionen Wintersemester 2005/2006 G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de Ältester Mechanismus für Code-Reuse:

Mehr

Prof. W. Henrich Seite 1

Prof. W. Henrich Seite 1 Klasse - ist ein benutzerdefinierter Datentyp (Referenztyp) - hat Datenelemente - hat Methoden - Konstruktor ist spezielle Methode zum Erstellen eines Objektes vom Typ der Klasse (Instanz) - jede Klasse

Mehr

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

DAP2-Programmierpraktikum Einführung in C++ (Teil 2) DAP2-Programmierpraktikum Einführung in C++ (Teil 2) Carsten Gutwenger 18. April 2008 Lehrstuhl 11 Algorithm Engineering Fakultät für Informatik, TU Dortmund Überblick Dynamischer Speicher Klassen und

Mehr

18. Vererbung und Polymorphie

18. Vererbung und Polymorphie 590 18. Vererbung und Polymorphie Ausdrucksbäume, Vererbung, Code-Wiederverwendung, virtuelle Funktionen, Polymorphie, Konzepte des objektorientierten Programmierens (Ausdrucks-)Bäume 591 -(3-(4-5))*(3+4*5)/6

Mehr

Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, Uhr Bearbeitungszeit: 105 Minuten

Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, Uhr Bearbeitungszeit: 105 Minuten Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, 13.00-14.45 Uhr Bearbeitungszeit: 105 Minuten Schalten Sie ihr Mobiltelefon aus. Bei der Klausur ist als einziges

Mehr

Informatik I (D-MAVT)

Informatik I (D-MAVT) Informatik I (D-MAVT) Übungsstunde 7 simon.mayer@inf.ethz.ch Distributed Systems Group, ETH Zürich Ablauf Nachbesprechung Übung 5 Besprechung/Vertiefung der Vorlesung Vorbesprechung Übung 7 Aufgabe 1:

Mehr

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke Java 2 Markus Reschke 07.10.2014 Datentypen Was wird gespeichert? Wie wird es gespeichert? Was kann man mit Werten eines Datentyps machen (Operationen, Methoden)? Welche Werte gehören zum Datentyp? Wie

Mehr

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

C++ - Operatoren. Eigene Klassen mit neuen Funktionen C++ - Operatoren Eigene Klassen mit neuen Funktionen Übersicht Klassen bisher Eigene Operatoren definieren 2 Bisher Durch Kapselung, Vererbung und Polymorphy können nun eigene Klassen definiert werden,

Mehr

C++ Teil 5. Sven Groß. 8. Mai IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 8. Mai / 16

C++ Teil 5. Sven Groß. 8. Mai IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 8. Mai / 16 C++ Teil 5 Sven Groß IGPM, RWTH Aachen 8. Mai 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 8. Mai 2015 1 / 16 Themen der letzten Vorlesung Live Programming zu A2 Gleitkommazahlen Rundungsfehler Auswirkung

Mehr

Vorlesung Objektorientierte Programmierung Klausur

Vorlesung Objektorientierte Programmierung Klausur Prof. Dr. Stefan Brass 16. Februar 2007 Dipl.-Inform. Annett Thüring Institut für Informatik MLU Halle-Wittenberg Vorlesung Objektorientierte Programmierung Klausur Name: Matrikelnummer: Studiengang: Aufgabe

Mehr

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18 C++ Teil 5 Sven Groß 13. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 13. Mai 2016 1 / 18 Themen der letzten Vorlesung Funktionen Funktionsüberladung, Signatur Rekursion const-deklaration Referenzen

Mehr

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

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur Unterprogramme Unterprogramme sind abgekapselte Programmfragmente, welche es erlauben, bestimmte Aufgaben in wiederverwendbarer Art umzusetzen. Man unterscheidet zwischen Unterprogrammen mit Rückgabewert

Mehr

Einführung in C++ Operatoren überladen (Klassen)

Einführung in C++ Operatoren überladen (Klassen) Einführung in C++ Operatoren überladen (Klassen) Operatoren überladen Die Überladung von Operatoren ermöglicht es, vorhandene Operatoren (+,-,...) auch auf Objekte von Klassen anzuwenden. Die meisten der

Mehr

Modellierung und Programmierung 1

Modellierung und Programmierung 1 Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 4. November 2015 Administratives Zur Abgabe von Übungsaufgaben Nein, wir

Mehr

Bereits behandelt: Einfache Datentypen / Variablen. Schleifen und Verzweigungen. Funktionen. Heute: Felder, Zeiger, Referenzen. Freispeicherverwaltung

Bereits behandelt: Einfache Datentypen / Variablen. Schleifen und Verzweigungen. Funktionen. Heute: Felder, Zeiger, Referenzen. Freispeicherverwaltung Kompaktkurs C++ Themen C 1 Bereits behandelt: Einfache Datentypen / Variablen Schleifen und Verzweigungen Funktionen Heute: Felder, Zeiger, Referenzen Freispeicherverwaltung Zeichenketten Kommandozeilenargumente

Mehr

C-Pointer (Zeiger, Adressen) vs. C++ Referenzen

C-Pointer (Zeiger, Adressen) vs. C++ Referenzen C-Pointer (Zeiger, Adressen) vs. C++ Referenzen Der Pointer (C/C++): In C/C++ ist der Pointer ein eigener Datentyp, der auf Variablen/Objekte zeigen kann. Indem man den Pointer dereferenziert, gewinnt

Mehr

Algorithmen und Programmierung II

Algorithmen und Programmierung II Algorithmen und Programmierung II Vererbung Prof. Dr. Margarita Esponda SS 2012 1 Imperative Grundbestandteile Parameterübergabe String-Klasse Array-Klasse Konzepte objektorientierter Programmierung Vererbung

Mehr