多态的应用之几何形体处理

2024-09-01 10:48

本文主要是介绍多态的应用之几何形体处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

输入若干个几何形体的参数,要求按面积从小到大输出,并在输出中指明几何形体类型。

#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;elsereturn 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++程序设计》

这篇关于多态的应用之几何形体处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126727

相关文章

Python结合PyWebView库打造跨平台桌面应用

《Python结合PyWebView库打造跨平台桌面应用》随着Web技术的发展,将HTML/CSS/JavaScript与Python结合构建桌面应用成为可能,本文将系统讲解如何使用PyWebView... 目录一、技术原理与优势分析1.1 架构原理1.2 核心优势二、开发环境搭建2.1 安装依赖2.2 验

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Java字符串处理全解析(String、StringBuilder与StringBuffer)

《Java字符串处理全解析(String、StringBuilder与StringBuffer)》:本文主要介绍Java字符串处理全解析(String、StringBuilder与StringBu... 目录Java字符串处理全解析:String、StringBuilder与StringBuffer一、St

浅析Java中如何优雅地处理null值

《浅析Java中如何优雅地处理null值》这篇文章主要为大家详细介绍了如何结合Lambda表达式和Optional,让Java更优雅地处理null值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录场景 1:不为 null 则执行场景 2:不为 null 则返回,为 null 则返回特定值或抛出异常场景

SpringShell命令行之交互式Shell应用开发方式

《SpringShell命令行之交互式Shell应用开发方式》本文将深入探讨SpringShell的核心特性、实现方式及应用场景,帮助开发者掌握这一强大工具,具有很好的参考价值,希望对大家有所帮助,如... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

resultMap如何处理复杂映射问题

《resultMap如何处理复杂映射问题》:本文主要介绍resultMap如何处理复杂映射问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录resultMap复杂映射问题Ⅰ 多对一查询:学生——老师Ⅱ 一对多查询:老师——学生总结resultMap复杂映射问题