多态程序实例--几何形体处理程序

来源:互联网 发布:3d动画制作软件 编辑:程序博客网 时间:2024/04/28 02:26
几何形体处理程序: 输入若干个几何形体的参数,
要求按面积排序输出。输出时要指明形状。
Input:
第一行是几何形体数目n(不超过100).下面有n行,每行以一个字母c开头.
若 c 是 ‘R’,则代表一个矩形,本行后面跟着两个整数,分别是矩形的宽和高
若 c 是 ‘C’,则代表一个圆,本行后面跟着一个整数代表其半径

若 c 是 ‘T’,则代表一个三角形,本行后面跟着三个整数,代表三条边的长度

Output:
按面积从小到大依次输出每个几何形体的种类及面积。每行一个几何形体,输
出格式为:
形体名称:面积


几何形体处理程序
Sample Input:
3
R 3 5
C 9
T 3 4 5
Sample Output
Triangle:6
Rectangle:15
Circle:254.34

// Geometric_processing.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <string>#include <math.h>using namespace std;#define pi 3.1415926//总的基类class xingti{public:virtual void print()=0;//输出,纯虚函数virtual double MianJi()=0;//面积,纯虚函数,没有函数体};//三角形类class Triangle:public xingti{public:double x;double y;double z;virtual void print();virtual double MianJi();};void Triangle::print(){cout<<"Triangle:"<<MianJi()<<endl;}double Triangle::MianJi(){double p = ( x+ y + z) / 2.0;return sqrt(p * ( p - x)*(p- y)*(p - z));}//矩形框类class Rectangle:public xingti{public:double x;double y;virtual void print();virtual double MianJi();};void Rectangle::print(){cout<<"Rectangle:"<<MianJi()<<endl;}double Rectangle::MianJi(){return x*y;}//圆类class circle:public xingti{public:double r;virtual void print();virtual double MianJi();};void circle::print(){cout<<"circle:"<<MianJi()<<endl;}double circle::MianJi(){   return pi*r*r;}//进行排序的程序void qort(xingti* a[100],int n){int i=0,k=0;for(i=0;i<n-1;i++){for(k=i+1;k<n;k++){if(a[i]->MianJi()>a[k]->MianJi()){xingti* temp;temp=a[i];a[i]=a[k];a[k]=temp;}}}}int _tmain(int argc, _TCHAR* argv[]){xingti* all_xingti[100];Triangle* Tr;Rectangle* Re;circle* Ci;int number;char ch;cin>>number;int i=0;for( i=0;i<number;i++){cin>>ch;switch(ch){case 'T':Tr=new Triangle();cin>>Tr->x>>Tr->y>>Tr->z;all_xingti[i]=Tr;break;case 'R':Re=new Rectangle();cin>>Re->x>>Re->y;all_xingti[i]=Re;break;case 'C':Ci=new circle();cin>>Ci->r;all_xingti[i]=Ci;break;}}for(int i=0;i<number;i++){all_xingti[i]->print();}qort(all_xingti,number);for(int i=0;i<number;i++){all_xingti[i]->print();}//system("pause");return 0;}


0 0