// Assignment 10 Solution - Fall 2020 #include #include #include #include #include using namespace std; class Location { double x; double y; public: Location(double arg1 = 0, double arg2 = 0) : x(arg1), y(arg2) {} double getX() const { return x; } double getY() const { return y; } }; ostream& operator<<(ostream& out, const Location& obj) { out << '(' << obj.getX() << ',' << obj.getY() << ')'; return out; } class Shape { protected: Location location; string color; string type; public: Shape(double = 0,double = 0, string col = "", string typ = "shape"); Location getLocation() const { return location; } string getType() const { return type; } string getColor() const { return color; } string area() const { return "n/a"; } }; Shape::Shape(double c_x, double c_y, string col, string typ) : location(c_x,c_y), color(col), type(typ) { } ostream& operator<<(ostream& out, const Shape& obj) { out << setw(10) << obj.getType() << setw(12) << obj.getColor() << " " << obj.getLocation(); return out; } class Square : public Shape { private: double side; public: Square(double c_x,double c_y, double s, string col); double get_side() { return side; } double area() const; }; Square::Square(double c_x, double c_y, double s, string col) : Shape(c_x,c_y,col,"Square"), side(s) { } double Square::area() const { return side * side; } class Circle : public Shape { private: double radius; public: Circle(double c_x, double c_y, double r, string col); double get_radius() { return radius; } double area() const; }; Circle::Circle(double c_x, double c_y, double r, string col) : Shape(c_x,c_y,col,"Circle"), radius(r) { } double Circle::area() const { const double Pi = 3.141592654; return Pi*radius*radius; } class Triangle : public Shape { private: double a,b,c; // length of 3 sides public: Triangle(double c_x,double c_y, double s1, double s2, double s3, string col); void print_sides(); double area() const; }; Triangle::Triangle(double c_x, double c_y, double s1, double s2, double s3, string col) : Shape(c_x,c_y,col,"Triangle"), a(s1), b(s2), c(s3) { } double Triangle::area() const { double s = (a + b + c) / 2.; // semiperimeter return sqrt(s*(s-a)*(s-b)*(s-c)); } int main() { cout << setprecision(2) << fixed << left; Shape sh(4,5,"red"); cout << sh << " area = " << sh.area() << endl; cout << endl; Square sq1(1.0,2.0,3.1,"green"); cout << sq1 << " area = " << sq1.area() << endl; Square sq2(1.5,2.5,3.2,"lime green"); cout << sq2 << " area = " << sq2.area() << endl; Square sq3(6.7,0.0,3.3,"chartreuse"); cout << sq3 << " area = " << sq3.area() << endl; cout << endl; Circle c1(0.0,2.0,3.4,"blue"); cout << c1 << " area = " << c1.area() << endl; Circle c2(0.0,2.0,3.5,"peacock blue"); cout << c2 << " area = " << c2.area() << endl; Circle c3(0.0,2.0,3.6,"sapphire"); cout << c3 << " area = " << c3.area() << endl; cout << endl; Triangle t1(1.4,2.0,1.1,1.2,1.3,"red"); cout << t1 << " area = " << t1.area() << endl; Triangle t2(1.23,2.0,3,4,5,"cardinal red"); cout << t2 << " area = " << t2.area() << endl; Triangle t3(4.56,2.75,1,1,1,"crimson"); cout << t3 << " area = " << t3.area() << endl; }