1. 程式人生 > >習題 12.4 寫一個程式,定義抽象基類Shape,由它派生出3個派生類:Circle(圓形)、Rectangle(矩形)、Triangle(三角形),用一個函式printArea分別輸出以上。。。

習題 12.4 寫一個程式,定義抽象基類Shape,由它派生出3個派生類:Circle(圓形)、Rectangle(矩形)、Triangle(三角形),用一個函式printArea分別輸出以上。。。

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;
}