多态的应用之几何形体处理
来源:互联网 发布:lol钻石知乎 编辑:程序博客网 时间:2024/04/29 01:26
输入若干个几何形体的参数,要求按面积从小到大输出,并在输出中指明几何形体类型。
#include <iostream>#include <cstdlib>#include <cmath>using namespace std;class CShape{public: virtual double Area()=0; //存虚函数,无函数体 virtual void PrintInfo()=0;};class CRectangle:public CShape{public: int w,h; virtual double Area(); virtual void PrintInfo();};class CCircle:public CShape{public: int r; virtual double Area(); virtual void PrintInfo();};class CTriangle:public CShape{public: int a,b,c; virtual double Area(); virtual void PrintInfo();};double CRectangle::Area(){ return w*h;}void CRectangle::PrintInfo(){ cout<<"Rectangle:"<<Area()<<endl;}double CCircle::Area(){ return 3.14*r*r;}void CCircle::PrintInfo(){ cout<<"Circle:"<<Area()<<endl;}double CTriangle::Area(){ double p=(a+b+c)/2.0; return sqrt(p*(p-a)*(p-b)*(p-c));}void CTriangle::PrintInfo(){ cout<<"Triangle:"<<Area()<<endl;}CShape* pShapes[100];int MyCompare(const void* s1,const void* s2);int MyCompare(const void* s1,const void* s2){ double a1,a2; CShape** p1; //s1,s2是void*, CShape** p2; p1=(CShape**)s1; //s1,s2指向pShape数组中的元素,数组元素是CShape*,因此p1,p2是 p2=(CShape**)s2; //指向指针的指针,CShape** a1=(*p1)->Area(); //*p1的类型是CShape*,是基类的指针,因此是多态 a2=(*p2)->Area(); if(a1<a2) return -1; else if(a2<a1) return 1; else return 0;}int main(){ int i,n; CRectangle *pr; CCircle *pc;CTriangle *pt; cin>>n; for(i=0;i<n;i++) { char c; cin>>c; switch(c) { case 'R': pr=new CRectangle(); cin>>pr->w>>pr->h; pShapes[i]=pr; break; case 'C': pc=new CCircle(); cin>>pc->r; pShapes[i]=pc; break; case 'T': pt=new CTriangle(); cin>>pt->a>>pt->b>>pt->c; pShapes[i]=pt; break; } } qsort(pShapes,n,sizeof(CShape*),MyCompare); for(i=0;i<n;i++) { pShapes[i]->PrintInfo(); //多态 } return 0;}输入样例:
输出样例:
案例来自北京大学网络课堂《C++程序设计》
0 0
- 多态的应用之几何形体处理
- 多态程序实例--几何形体处理程序
- 064day(多态实例:几何形体程序)
- 几何形体对象--Geometry
- 【opencv+python】图像处理之二、几何变换(仿射与投影)的应用
- 【Unity】Mesh网格编程(三)万能网格几何形体
- 7-003几何形体面积排序,有错,待改
- 几何矩的应用
- 数字图像处理之几何变换
- 数字图像处理之几何运算
- 三维形体的构造及表达
- 《高效编程十八式》(4/13)形体建模:继承与多态
- 图像处理的几何变换
- Oracle_spatial的几何处理函数
- Oracle_spatial的几何处理函数
- 计算几何的基本应用~~~~
- matlab之原始处理图像几何变换
- matlab之原始处理图像几何变换
- 深入浅出Nodejs读书笔记
- 编程之美 -- 2.5 寻找最大的K个数(快排方法)
- UIButton 不响应或延迟响应 UIControlEventTouchDown
- BNU 鸣人的查克拉
- Dynamic Proxy 动态代理模式的Java实现
- 多态的应用之几何形体处理
- LED子系统
- Codeforces 382A
- 杂谈:加班中离世的人
- 最长单调递增子序列--动态规划
- 平衡二叉树
- 《JAVA与模式》之观察者模式
- 机器学习实战-PCA主成分分析、降维
- BZOJ1143【floyd】【二分图匹配】