/*
FH Giessen Friedberg                                                           Uebung 08
C++
Prof. Dr. Henrich

Ue1
Erweitern Sie das Programm aus Uebung 6 Aufgabe 2 wie folgt:
1.    Erzeugen Sie einen Programmabsturz durch Verwenden von Kopien.
2.    Beheben Sie das Problem.
3.    Erzeugen Sie eine logisch falsche Situation durch Verwendung der Zuweisung.
4.    Beheben Sie das Problem.
5.    Vervollständigen Sie die Klasse so, daß Sie als Basisklasse geeignet wäre.
 

Ue2
Welche Ausgaben erzeugt das folgende Programm?
(Anmerkung: Der Einfachheit halber sind alle Elemente public!)

class A{
public:
     int i;
     A():i(5){}
};

class B{
public:
     int j;
     B():j(6){}
//   virt. Destr. etc.
};

class C : public B{
public:
     int k;
     A a;
     C():k(7){}
     void show(){cout<<" i: "<<a.i<<" j: "<<j<<" k: "<<k<<endl;}
};

void main(){
     C c1;
     c1.show();
     c1.a.i=55;
     c1.j=66;
     c1.k=77;
     C c2=c1;
     c2.show();
}

Erstellen Sie in der Klasse C einen eigenen Kopierkonstruktor so, daß das Kopieren
richtig erfolgt.
 

Ue3
Gegeben ist eine Klassenhierarchie für Dokumente:

    class Dok{
    public:
         virtual void show()=0;
    };

    class ZahlDok :public Dok{
         int i[2];
    public:
         ZahlDok(){i[0]=11;i[1]=22;}
         void show(){cout<<"ZahlDok: "<<i[0]<<i[1]<<endl;}
    };

    class CharDok :public Dok{
         char c[2];
    public:
         CharDok(){c[0]='J';c[1]='A';}
         void show(){cout<<"CharDok: "<<c[0]<<c[1]<<endl;}
    };

Sowie ein Teil der Klassenhierarchie der Anwendungsklasse
Eine Anwendung verwaltet Dokumente (hier maximal 3) die auf Bedarf hinzugefügt
werden (Methode addDok())

    class Anwendung{
    protected:
         Dok* dp[3];
         int anz;
    public:
         Anwendung():anz(0){}
    //    TODO

    };

Vervollständigen Sie die Klassenhierarchie der Anwendung so, daß folgende
main() Fkt. ordnungsgemäss abgearbeitet wird.

    void main(){
     int k;
     Anwendung* AP;
     cout<<"Zahl (=1) oder Char (<>1)Anwendung ?\n";    // Benutzerauswahl
     cin >>k;                                           // der Anwendung
     if (k==1) AP = new ZAnw;    // Zahlenanwendung <-> ZahlDok
     if (k!=1) AP = new CAnw;    // Charanwendung <-> CharDok
     for(int i=0;i<3;++i){            // einfache Simulation des Hinzufügens
      cout<<"weiteres Dokument\n";    // von Dokumenten durch Benutzer
      AP->addDok();
     }
     AP->show();                    // Anzeigen der Dokumente
     delete AP;
}

Ue4
Erstellen Sie eine Funktion, die das Minimum von zwei Werten zurückgibt.
Wenden Sie die Funktion sowohl auf Instanzen von int als auch auf Instanzen von
Modulo5 (Klasse erstellen!) an.
*/