C++ //习题 12.4 写一个程序,定义抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出

时间:2025-03-14 20:59:37
#include <iostream> #include <iomanip> using namespace std; const double PI = 3.14159; class Shape{ public: Shape(){} virtual ~Shape(){} virtual void input() = 0; virtual void printArea() const = 0; }; class Circle: public Shape{ public: Circle(){radius = 0.0;} ~Circle(){} Circle(double r): radius(r){} virtual void input(); virtual void printArea() const; protected: double radius; }; void Circle::input(){ cout<<"Enter Circle Radius: "; cin>>radius; cout<<endl; } void Circle::printArea() const{ cout<<setiosflags(ios::fixed)<<setprecision(2); cout<<"Circle Area = "<<PI * radius *radius<<endl<<endl; } class Rectangle: public Shape{ public: Rectangle(){length = 0.0; width = 0.0;} ~Rectangle(){} Rectangle(double l, double w): length(l), width(w){} virtual void input(); virtual void printArea() const; protected: double length; double width; }; void Rectangle::input(){ cout<<"Enter Rectangle Length: "; cin>>length; cout<<"Enter Rectangle Width: "; cin>>width; cout<<endl; } void Rectangle::printArea() const{ cout<<setiosflags(ios::fixed)<<setprecision(2); cout<<"Rectangle Area = "<<length * width<<endl<<endl; } class Triangle: public Shape{ public: Triangle(){base = 0.0; height = 0.0;} ~Triangle(){} Triangle(double b, double h): base(b), height(h){} virtual void input(); virtual void printArea() const; protected: double base; double height; }; void Triangle::input(){ cout<<"Enter Triangle Base Side: "; cin>>base; cout<<"Enter Triagnle Height: "; cin>>height; cout<<endl; } void Triangle::printArea() const{ cout<<setiosflags(ios::fixed)<<setprecision(2); cout<<"Triangle Area = "<<(base * height) / 2.0<<endl<<endl; } void function(Shape *pt, Circle *c, Rectangle *r, Triangle *t){ pt = c; c->input(); c->printArea(); pt = r; r->input(); r->printArea(); pt = t; t->input(); t->printArea(); } int main(){ Circle c; Rectangle r; Triangle t; Shape *pt = NULL; function(pt, &c, &r, &t); system("pause"); return 0; }