多态应用实例一:几何形体程序

2023-11-23 17:48

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

用基类指针数组存放派生类对象的指针地址,是多态的常用应用,遍历该指针数组就能对各个派生类对象做各种操作。

problem

输入不同几何形体及其参数,要求按照面积大小顺序输出其对应的面积,以及集合形体形状。

code

#include <iostream>
#include <math.h>
#include<stdlib.h>
using namespace std;class CShape{public:virtual double Area() = 0;//纯虚函数virtual void PrintInfo() = 0;
};class CRectangle: public CShape{public:double l,w;double Area(){return l*w;}void PrintInfo(){cout<<"Rectangle: "<<Area()<<endl;}
};class CTriangle: public CShape{public:double a,b,c;double Area(){double p = (a+b+c)/2.0;return sqrt(p*(p-a)*(p-b)*(p-c));}void PrintInfo(){cout<<"Triangle: "<<Area()<<endl;}
};class CCircle: public CShape{public:double r;double Area(){return 3.14159*r*r;}void PrintInfo(){cout<<"Circle: "<<Area()<<endl;}
};
int comp(const void *s1,const void *s2){CShape **p1;CShape **p2;p1 = (CShape **)s1;p2 = (CShape **)s2;double d1,d2;d1 =  (*p1)->Area();d2 =  (*p2)->Area();return d1>d2?1:-1; 
}
int main(){CShape *pShapes[100];int n;cin>>n;char c;CRectangle *pr; CTriangle *pt; CCircle *pc;for(int i=0;i<n;i++){cin>>c;switch(c){case'R':pr = new CRectangle();cin>>pr->l>>pr->w;pShapes[i] = pr;break;case'T':pt = new CTriangle();cin>>pt->a>>pt->b>>pt->c;pShapes[i] = pt;break;case'C':pc = new CCircle();cin>>pc->r;pShapes[i] = pc;break;default: break;}}qsort(pShapes,n,sizeof(CShape *),comp);for(int i=0;i<n;i++){pShapes[i]->PrintInfo();}return 0;
}

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



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

相关文章

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

mysqld_multi在Linux服务器上运行多个MySQL实例

《mysqld_multi在Linux服务器上运行多个MySQL实例》在Linux系统上使用mysqld_multi来启动和管理多个MySQL实例是一种常见的做法,这种方式允许你在同一台机器上运行多个... 目录1. 安装mysql2. 配置文件示例配置文件3. 创建数据目录4. 启动和管理实例启动所有实例

Java function函数式接口的使用方法与实例

《Javafunction函数式接口的使用方法与实例》:本文主要介绍Javafunction函数式接口的使用方法与实例,函数式接口如一支未完成的诗篇,用Lambda表达式作韵脚,将代码的机械美感... 目录引言-当代码遇见诗性一、函数式接口的生物学解构1.1 函数式接口的基因密码1.2 六大核心接口的形态学

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如