当前位置: 首页 > 工具软件 > PrintArea > 使用案例 >

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

湛功
2023-12-01

C++程序设计(第三版) 谭浩强 习题12.4 个人设计

习题 12.4 写一个程序,定义抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象时给定。

代码块:

#include <iostream>
#include <iomanip>
using namespace std;
//基类Shape
class Shape
{
public:
	Shape(){}
	virtual ~Shape(){}
	virtual void printArea() const{}
	virtual void shapeName() const =0;
};
class Circle: public Shape
{
public:
	Circle(double r){radius=r;}
	~Circle(){}
	virtual void printArea() const {cout<<setw(8)<<"area="<<3.14159*radius*radius<<endl;}
	virtual void shapeName() const {cout<<"Circle ";}
protected:
	double radius;
};
class Rectangle: public Shape
{
public:
	Rectangle(double a, double b){x=a; y=b;}
	~Rectangle(){}
	virtual void printArea() const {cout<<setw(5)<<"area="<<x*y<<endl;}
	virtual void shapeName() const {cout<<"Rectangle ";}
protected:
	double x, y;
};
class Triangle: public Shape
{
public:
	Triangle(double a, double h){x=a; y=h;}
	~Triangle(){}
	virtual void printArea() const {cout<<setw(6)<<"area="<<(x*y)/2<<endl;}
	virtual void shapeName() const {cout<<"Triangle ";}
protected:
	double x, y;
};
int main()
{
	Circle c(5);
	Rectangle rec(3, 4);
	Triangle tr(4, 5);
	Shape *pt;
	pt=&c;
	pt->shapeName();
	pt->printArea();
	pt=&rec;
	pt->shapeName();
	pt->printArea();
	pt=&tr;
	pt->shapeName();
	pt->printArea();
	system("pause");
	return 0;
}
 类似资料: