OOP 抽象基类 Shape

93 阅读1分钟

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;
}
运行结果:

屏幕截图 2021-11-28 222344.png