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