// this function is what is required by task #3 here: https://sites.google.com/site/kostovoop/tasks // Составить и отладить программу: // - создать некий XList фигур, наполнить его случайным образом конкретными фигурами всех типов; // - вывести в std::cout общее кол-во фигур с помощью Shape::GetCount(); // - напечатать в std::cout сведения обо всех фигурах, находящихся в списке; // - очистить память; // - вывести в std::cout общее кол-во фигур с помощью Shape::GetCount() – удостовериться, что там 0; // - завершить работу программы. void task3() { XList<Shape> shapesList; // pt, circle, rect, square, polyline Point * pt = new Point("a point", 10, 100); // 1 Circle * circle = new Circle("a circle", 30, Point("circle center", 10, 20)); // 2 Rect * rect = new Rect("a rect", 10, -30, 10, -100); // 2 Square * square = new Square("a square", 40, 20, 10); // 2 Polyline * line = new Polyline("line"); // 1 Point * pt1 = new Point("", 10, 20); Point * pt2 = new Point("", 20, 20); Point * pt3 = new Point("", 20, 40); Point * pt4 = new Point("", 10, 40); line->AddPoint(*pt1); line->AddPoint(*pt2); line->AddPoint(*pt3); line->AddPoint(*pt4); shapesList.pushBack(pt); shapesList.pushBack(circle); shapesList.pushBack(rect); shapesList.pushBack(square); shapesList.pushBack(line); std::cout << "Total number of shapes is: " << Shape::getCount() << std::endl; assert(Shape::getCount() == 16); // 5 figures in list and their copies, 4 points in the polyline, rect's origin, square's origin, circle's center XList<Shape>::Iterator it = shapesList.begin(); int l = shapesList.numberOfElements() + 1; while(--l > 0){ Shape * shape = it.currentItem(); std::cout << *shape << std::endl; it.next(); } shapesList.clearList(); // freeing memory delete pt; delete circle; delete square; delete rect; delete line; delete pt1; delete pt2; delete pt3; delete pt4; std::cout << "Total number of shapes is now: " << Shape::getCount() << std::endl; assert(Shape::getCount() == 0); }
int main(){ XList<Shape*> shapes; Point * point1 = new Point(0., 2., "point_1"); shapes.push_back(point1); Point * point2 = new Point(2., 2., "point_2"); shapes.push_back(point2); Point * point3 = new Point(2., 0., "point_3"); shapes.push_back(point3); Point * point4 = new Point(0., 0., "point_4"); shapes.push_back(point4); Circle * circle = new Circle(point4, 10., "circle_1"); shapes.push_back(circle); Rect * rect = new Rect(point1, point2, point3, point4, "rectangle"); shapes.push_back(rect); try { Square * square = new Square(point1, point2, point3, point4, "square"); shapes.push_back(square); } catch (const char* error){ // std::cout << "EXCEPTION RAISED: " << error << std::endl; } Polyline * polyline = new Polyline("polyline"); polyline->AddPoint(point1); polyline->AddPoint(point2); polyline->AddPoint(point3); polyline->AddPoint(point4); shapes.push_back(polyline); for (XList<Shape*>::iterator it = shapes.begin(); it != NULL; ++it) { std::cout << *it; } printf("Number of shapes = %d\n", Shape::GetCount()); for (XList<Shape*>::iterator it = shapes.begin(); it != NULL; ++it) { delete *it; } printf("Number of shapes = %d\n", Shape::GetCount()); return 0; }
int main() { std::cout<<Shape::GetCount()<<std::endl; //0 XList<Shape*>* shlist = new XList<Shape*>; Point* point0 = new Point("simple_point"); Point* point1 = new Point(1,1); Point* point2 = new Point(-2.2, 2); Circle* circle = new Circle("bublic", *point0,5); Rect* rect1 = new Rect(*point1, *point2); Square* square = new Square(*point0, *point1); Rect* rect2 = new Rect(*square); Polyline* pl = new Polyline; pl->AddPoint(*point0); pl->AddPoint(*point1); pl->AddPoint(*point2); Square* sq = NULL; try { sq = new Square("ABBA", *point1, *point2); shlist->push_front(sq); } catch (std::exception& e) { std::cout << e.what() << std::endl; } try { sq = new Square("ABBA2", *point1, *point0); shlist->push_front(sq); } catch (std::exception& e) { std::cout << e.what() << std::endl; } circle->Print(); std::cout<<Shape::GetCount()<<std::endl; //21 shlist->push_back(point0); shlist->push_back(rect2); shlist->push_back(circle); shlist->push_front(rect1); shlist->push_back(square); shlist->push_back(pl); shlist->push_back(point2); shlist->push_front(point1); std::cout<<Shape::GetCount()<<std::endl; //21 for (XList<Shape*>::iterator it = shlist->begin(); it != shlist->end(); ++it) { std::cout<<**it<<std::endl; } std::cout<<Shape::GetCount()<<std::endl; //21 for (XList<Shape*>::iterator it = shlist->begin(); it != shlist->end(); ++it) { delete *it; } std::cout<<Shape::GetCount()<<std::endl; //0 delete shlist; std::cout<<Shape::GetCount()<<std::endl; //0 Named *myshape = new Point(0, 0); delete myshape; std::cout<<Shape::GetCount()<<std::endl; //0 return 0; }