Aufgaben

  1. Vererbung
    Leiten Sie die Lorentz-Vektor Klasse (Vierer-Vektor \ensuremath{ = \; (E, p_x, p_y, p_z) = (E, \vec{p} )} ) von der Dreier-Vektor Klasse ab.
    Lorentz-Vektoren sollten als zusätzliche Methoden die Masse berechnen können:

    \begin{displaymath}M = \sqrt{E^2 - \vec{p}^2}\end{displaymath}

    sowie die invariante Masse zweier Lorentzvektoren:

    \begin{displaymath}M_{inv} = \sqrt{(E_1+E_2)^2 - (\vec{p_1}+\vec{p_2})^2}\end{displaymath}


    
    int main()
     {
       MyLVector c(1.000001,1.,0.,0.);
       MyLVector d(2.,1.,1.,0.);
       MyLVector e(1.000001,-1.,0.,0.);
    
       cout << "angle c, e = " << c.Angle(e) << endl; // My3Vector-Methode
       cout << "mass d = " << d.Mass() << endl; // MyLVector-Methode
       cout << "mass c+e = " << c.Mass(e) << endl; 
       ...
    
    

    Lösungsbeispiel: Header MyLVector.h, Code MyLVector.cpp, Testprogramm TLVector.cpp.


  2. Vererbung und Polymorphsimus 1:
    Übernommen von http://www.lrz-muenchen.de/ebner/C++/Uebung/aufgaben_004.html
    Das source file particles.C (html, src) enthält ein Grundgerüst zu einer allgemeinen Basisklasse Particle und davon abgeleiteter Klassen.

    (a) Definieren Sie die deklarierten Konstruktoren jeder Klasse.

    (b) Erstellen Sie eine Member-Funktion
    void move (double dx, double dy, double dz) ,
    die ein Particle um die angegebenen Werte in den drei Koordinaten verschiebt (also x+dx, y+dy, z+dz).
    Hinweis: Überlegen Sie sich, wo diese Funktion überall deklariert/definiert werden muss, um möglichst wenig Arbeit zu haben. Zum Test löschen Sie die Kommentarzeichen in Schleife 1 in main().
    (c) Wie erreicht man, dass die Schleife 2 in main() immer die richtige toString() Funktion wählt, also z.B. tatsächlich ein Molecule ausgibt, wenn sich hinter dem Particle* Pointer ein solches verbirgt?
    (d) Ein Chemiker möchte natürlich immer wissen, aus welchen Elementen ein Particle besteht. Es soll also nur möglich sein, Atome und Moleküle zu erzeugen, nicht aber ein "abstraktes" Particle. (Sorgen Sie dafür, dass die Particle-Klasse abstrakt ist.)

    Ergänzung: In dem Beispiel wird bei der Klasse ChargedMolecule multiple inheritance verwendet. Das ist ziemlich heikel, insbesondere wenn, wie in dem Fall, die Vererbung auf eine gemeinsame Basisklasse zurückgeht. Eine Diskussion dazu findet sich z.B. hier


  3. Vererbung und Polymorphsimus II:
    (a) Laden Sie sich diese source files herunter. Schauen Sie sich Verhalten und Probleme beim Kompilieren bzw. zur Laufzeit genau an. Ändern Sie die Programme falls Compilier Fehler auftreten.

    (b) Static und Dynamic Casting:
    Wie zuvor source files herunter laden und versuchen zum laufen zu bringen:


  4. Pure abstract class/Interface
    (a) Implementieren Sie das vorgestellte Beispiel mit der Nullstellen-Suche, benutzen Sie andere Funktionen, z.B. $e^x - x^{10}$ , ...

    (b) Nur die wenigsten physikalischen Fragestellungen lassen sich einfach lösen, auch bei vglw. simplen Problemen wird die analytische Lösung schnell ziemlich unhandlich. Ein klassisches Beispiel ist der Schiefe Wurf: Ein Ball wird mit 10 m/s geworfen, die Anfangshöhe ist 2 m, bei welchem Winkel wird die maximale Weite erreicht?


GDuckeck 2019-08-01