-
Vektor-Klasse
Entwerfen Sie ausgehend von den Beispielen die
My3Vector
Klasse. Zunächst können Sie alle Teile
(Deklaration, Implementierung der Methoden und Aufruf in
main() )
in ein gemeinsames source file packen.
Führen Sie einige zusätzliche `sinnvolle' Methoden ein,
z.B. Länge eines Vektors, Winkel zwischen zwei Vektoren,
Skalarprodukt, Vektorprodukt.
Lösungsbeispiel: Alles zusammen T3VectorAllInclusive.cpp
(html,
source),
- Vektor-Klasse aufteilen
Folgen Sie jetzt der C++ Konvention das Programm in drei verschiedene Files zu trennen:
die Deklaration der My3Vector-Klasse kommt in eine
Header-Datei (z.B.
My3Vector.h),
die Implementierung der Methoden geht in ein extra source file (z.B.
My3Vector.cpp)
und schliesslich die
main() Funktion zum Testen in z.B.
T3Vector.cpp
Lösungsbeispiel:
Header My3Vector.h (html, source),
Implementation My3Vector.cpp (html, source),
Testprogramm T3Vector.cpp (html, source)
Kompilieren:
g++ -o T3Vector T3Vector.cpp My3Vector.cpp
- Operator-Overloading
Implementieren Sie die Addition zweier Vektoren mit dem
+ Operator und die Multiplikation mit
double
int main()
{
double x = 3.;
My3Vector a(1.,1.,0.);
My3Vector b(-1.,1.,0.);
My3Vector c = a + b;
My3Vector d = a * x; // von rechts
My3Vector e = x * a; // von links
}
Lösungsbeispiel:
Header myvec.h,
code myvec.cpp,
Testprogramm tvec.cpp.
- Const correct Definiton der My3Vector Klasse
Implementieren Sie sorgfältig die
const
Spezifikation für Argumente und Methoden in der
My3Vector Klasse.
Und zur Anschauung noch die ThreeVector Klasse aus
der CLHEP Klassenbibliothek
(Utility Classes for Particle Physics):
Header ThreeVector.h,
source code ThreeVector.cc,
ThreeVector.icc
- Statistik
Die Klasse StatCalc
(html,
source)
implementiert einige grundlegende Statistikfunktionen,
wie Mittelwert, Standardabweichung, ...
Ein kurzes Testprogramm ist angehängt, das Zufallszahlen in ein
StatCalc
Objekt füllt und anschliesend die Statistik-größen ausgibt.
(a) Probieren Sie das Programm aus und Erweitern dann die
StatCalc Klasse
um Methoden zur Berechnung und Ausgabe von Minimum und Maximum.
(c) In semester.dat
finden Sie die Semesterzahl
bis zum Physikdiplom für zufällig ausgewählte Studenten. Die ersten 100 Einträge sind von Studenten der LMU, die restlichen 100
von Studenten der TUM. Lesen Sie die Daten ein und füllen LMU bzw TUM Zahlen jeweils in ein
StatCalc Objekt.
Sind die Mittelwerte im Rahmen der Schwankungen konsistent ?
(d) Überlegen Sie wie man das Problem aus
(c) (mehrere Statistiken parallel führen) in einer prozeduralen Sprache (Fortran, C)
angehen könnte, d.h. ohne Klassen und Objekte, nur mit Arrays und Funktionen.
- BigInts, statisch
Entwerfen Sie die Klasse
BigInt zunächst statisch, so wie
im Beispiel vorgegeben.
Implementieren Sie den
operator und wenn Sie Zeit/Lust haben auch
noch Subtraktion, Multiplikation und Division.
-
BigInts, dynamisch
Modifizieren Sie die
BigInt Klasse, so dass Speicher dynamisch
zugewiesen wird. Jetzt müssen auch Copy-constructor,
=operator
und destructor implementiert sein.
Lösungsbeispiel:
Header BigInt.h,
code BigInt.cpp,
Testprogramm tBigInt.cpp.
- Mondlandung
Ein Spieleklassiker ist die Mondlandung:
- Raumfähre wird von Mond angezogen
- Mit Gegen-Schub kann man Fall kontrollieren, allerdings sind Treibstoffvorräte begrenzt
- Ziel ist möglichst weiche Landung auf Mond.
Erstellen Sie eine C++ Klasse für Mondfähre, welche Datenelemente, welche Methoden werden benötigt?
Lösungsbeispiel aus Buch
Coding for Fun mit C++
mondlandung.cpp.