ZGeoObj nz2(z2); { // Testen der Initialisierung/Zuweisung: cout << "neues ZGeoObj nz2 mit Flaeche " << nz2.flaeche() << endl; nz2 = z1; cout << "neues ZGeoObj nz2 jetzt mit Flaeche " << nz2.flaeche() << endl; nz2.Add(*(new Kreis(Punkt(3.0, 4.0), 10.0))); Kreis *pk = dynamic_cast<Kreis*>(nz2.GetGeoObj(2)); if(pk) cout << "nz2[2] ist dynamischer Kreis mit Flaeche: " << pk->flaeche() << endl; cout << "Flaeche nz2 daher jetzt: " << nz2.flaeche() << endl; delete nz2.Remove(*pk); cout << "Kreis aus nz2 entfernt und geloescht. Flaeche wieder: " << nz2.flaeche() << endl; } { // Testen der Downcasts: Dreieck *pd = dynamic_cast<Dreieck*>(nz2.GetGeoObj(1)); if(pd) cout << "Downcast zu Dreieck erfolgreich." << endl; else cout << "Downcast zu Dreieck abgelehnt." << endl; Kreis *pk = dynamic_cast<Kreis*>(nz2.GetGeoObj(1)); if(pk) cout << "Downcast zu Kreis erfolgreich." << endl; else cout << "Downcast zu Kreis abgelehnt." << endl; } { // unendliche Rekursion: z1.Add(z2); cout << "Flaeche von z1: " << flush; cout << z1.flaeche() << endl; } }