// Übung PG 2, Teil 4 // inhomogeneous list for Shape-Objects (2nd version) // Author: Prinz / Kirch-Prinz / Weber // Date: 26.05.05 #include #include "shapeList.h" using namespace std; int main() { cout << "\n\t *** Eine Liste geometrischer Figuren ***\n" << endl; ShapePtrList myShapes; cout << myShapes.toString() << endl; // print list cout << "Elemente in die Liste einfuegen: " << endl; // append at end of list: myShapes.push_back( new Line( Point( 0, 0 ), Point( 2, 2 ) ) ); myShapes.push_back( new Rectangle( Point( -1, -1 ), 2, 2) ); // insert ellipse at front of list: myShapes.push_front( new Ellipse( Point( 0, 0 ), 3, 1) ); Point vertices[] = { Point( 0, -3 ), Point( -3, 0 ), Point( 0, 3 ), Point( 3, 0 ) }; Shape* ptr = new Polygon( vertices, 4 ); // a rombus // insert polygon as second element: myShapes.insert( ++myShapes.begin(), ptr ); // a circle as last-but-one element: ShapePtrList::iterator pos = // position of circle myShapes.insert( --myShapes.end(), new Circle( Point( 0, 0 ), 5 ) ); ( *pos )->scale( 0.7 ); // make this element smaller cout << "Anzahl Elemente in der Liste: " << myShapes.size() << endl; cout << myShapes.toString() << endl; // print list cout << "Figur vor dem Kreis loeschen ... " << endl; myShapes.erase( --pos ); cout << "und die zweite Figur (das Polygon) verschieben: " << endl; pos = myShapes.begin(); ptr = *( ++pos ); // second element = pointer to polygon ptr->move( 0, 3 ); // move upwards cout << "Die veraenderte Liste: " << endl << myShapes.toString(); // print list cin.get(); cout << "Kopie der Liste anlegen " "und Groesse der Figuren verdoppeln:" << endl; ShapePtrList yourShapes( myShapes ); // use of copy constructor yourShapes.scale( 2.0 ); // double size of figures cout << yourShapes.toString() << endl; // print new list cout << "Die urspruengliche Liste ist unveraendert:\n" << myShapes.toString() << endl; // print old list cout << "Zuweisung von Listen testen!\n" << "Erste Figur (Ellipse) in der neuen Liste loeschen" << endl; yourShapes.pop_front(); cout << "und die Liste der urspruengliche Liste zuweisen:" << endl; myShapes = yourShapes; // assignment cout << myShapes.toString(); // print result cin.get(); return 0; }