1. 程式人生 > >第十四周專案2:Shape類

第十四周專案2:Shape類

/*
* 程式的版權和版本宣告部分
* Copyright (c)2012, 煙臺大學計算機學院學生
* All rightsreserved.
* 檔名稱: Shape.cpp
* 作 者:李巧麗
* 完成日期:2013 年5月30日
* 版本號: v1.0
* 對任務及求解方法的描述部分:略
* 輸入描述:略
* 問題描述:略
*/
#include<iostream>
using namespace std;
class Shape
{
public:
virtual double area() =0;
};
class Rectangle:public Shape
{
public:
	Rectangle(double l,double w):length(l),width(w){}
	virtual double area()
	{
		return length*width;
	}
private:
	double length;
	double width;
};
class Triangle:public Shape
{
public:
	Triangle(double h,double l):height(h),length(l){}
	virtual double area()
	{
		return 0.5*height*length;
	}
private:
	double height;
	double length;
};
class Circle:public Shape
{
public:
	Circle(double r):radius(r){}
	virtual double area()
	{
		return 3.1415926*radius*radius;
	}
private:
	double radius;
};

int main()
{
	Circle c1(12.6),c2(4.9);    //建立Circle類物件c1,c2,引數為圓半徑
	Rectangle r1(4.5,8.4),r2(5.0,2.5);       //建立Rectangle類物件r1,r2,引數為矩形長、寬
	Triangle t1(4.5,8.4),t2(3.4,2.8);    //建立Triangle類物件t1,t2,引數為三角形底邊長與高
	Shape *pt[6]={&c1,&c2,&r1,&r2,&t1,&t2}; //定義基類指標陣列pt,各元素指向一個派生類物件
	double areas=0.0;      //areas為總面積
	for(int i=0; i<6; i++)
	{
		areas=areas+pt[i]->area();
	}
	cout<<"totol of all areas="<<areas<<endl;   //輸出總面積
	return 0;
}

執行結果:


心得體會:

各個類中 virtual double area()這個成員函式的實現放在派生類中完成時, virtual double area() 中的virtual可加可不加。但是如果在類外完成一定不能加virtual。