2.声明抽象基类 Shape,由它派生出三个类,圆形 Circle,矩形 Rectangle,三角形 Triangle, 用虚函数 area 分别计算各种图形的面积。
代码:
# include <iostream>
# include <cmath>
using namespace std;
class Shape
{
public:
virtual double printArea() const { return 0.0; };
};
class Circle :public Shape
{
public:
Circle(double = 0);
virtual double printArea() const { return 3.14159 * radius * radius; }
protected:
double radius;
};
Circle::Circle(double r) :radius(r)
{
}
class Rectangle :public Shape
{
public:
Rectangle(double = 0, double = 0);
virtual double printArea() const;
protected:
double height;
double width;
};
Rectangle::Rectangle(double w, double h) :width(w), height(h) {
}
double Rectangle::printArea()const
{
return width * height;
}
class Triangle :public Shape
{
public:
Triangle(double = 0, double = 0 , double = 0);
virtual double printArea() const;
protected:
double a;
double b;
double c;
};
Triangle::Triangle(double a, double b,double c) :a(a), b(b),c(c) {
}
double Triangle::printArea()const
{
double p = (a + b + c) / 2;
return sqrt(p * (p - a) * (p - b) * (p - c));
}
void Area(const Shape& s)
{
cout << s.printArea() << endl;
}
int main()
{
double r;
cout << "请输入圆的半径:";
cin >> r;
Circle circle(r);
cout << "圆的面积:";
Area(circle);
double re_l ,re_w;
cout <<endl << "请输入矩形的长和宽:";
cin >> re_l >> re_w;
Rectangle rectangle(re_l, re_w);
cout << "矩形的面积:";
Area(rectangle);
double tr_a, tr_b ,tr_c;
cout << endl << "请输入三角形的三边: ";
cin >> tr_a >> tr_b >> tr_c;
Triangle triangle(tr_a,tr_b ,tr_c);
cout << "三角形的面积:";
Area(triangle);
system("PAUSE");
return 0;
}
运行结果: