064day(多态实例:几何形体程序)

2023-10-27 22:40

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

172210704111-陈国佳总结《2017年12月13日》【连续064天】

标题:多态实例:几何形体程序;

内容:

A.几何形体处理程序:

输入若干个几何形体参数,按面积排序输出;

Input:

第一行是几何形体数目n,下有n行,每行以一个字母c开头。若c是‘R’,则是矩形,后跟2个整数(长宽);

若c是‘C’,代表圆,后跟一个数;若c是‘T’,则代表一个三角形,后跟三个整数,代表三边;

Output:

按面积从小到大输出每个几何形体的种类和面积。格式:  形体名称:面积

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){
double a1,a2;
CShape**p1;
CShape**p2;
p1=(CShape**)s1;  //多态
p2=(CShape**)s2;
a1=(*p1)->Area();
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; 
}


使用多态可以便于扩充程序:

例如上题,加入一个新的几何形体,比如五边形,只需多写一个CShape的派生类,并在main中的switch语句中加入一个case;

注意:用基类指针数组存放指向各种派生类对象的指针,然后遍历该数组,就可对各个派生类对象进行各种操作;


B.

class Base{
public:
void fun1(){fun2();}
virtual void fun2(){cout<<"Base::fun2()"<<endl;}
};
class Derived:public Base{
public:
virtual void fun2(){cout<<"Derived:fun2()"<<endl;}
};
int main(){
Derived d;
Base*pBase=&d;
pBase->fun1();
return 0;
}


上式中的fun1可写成 void fun1(){this->fun2();}  //this是基类指针,fun2是虚函数,多态

在非构造,析构函数的成员函数中调用虚函数,是多态!


明日计划:继续学习分治;


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


原文地址:https://blog.csdn.net/orangecloudy/article/details/78797636
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/288905

相关文章

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

Java List排序实例代码详解

《JavaList排序实例代码详解》:本文主要介绍JavaList排序的相关资料,Java排序方法包括自然排序、自定义排序、Lambda简化及多条件排序,实现灵活且代码简洁,文中通过代码介绍的... 目录一、自然排序二、自定义排序规则三、使用 Lambda 表达式简化 Comparator四、多条件排序五、

Java实例化对象的​7种方式详解

《Java实例化对象的​7种方式详解》在Java中,实例化对象的方式有多种,具体取决于场景需求和设计模式,本文整理了7种常用的方法,文中的示例代码讲解详细,有需要的可以了解下... 目录1. ​new 关键字(直接构造)​2. ​反射(Reflection)​​3. ​克隆(Clone)​​4. ​反序列化

SpringBoot后端实现小程序微信登录功能实现

《SpringBoot后端实现小程序微信登录功能实现》微信小程序登录是开发者通过微信提供的身份验证机制,获取用户唯一标识(openid)和会话密钥(session_key)的过程,这篇文章给大家介绍S... 目录SpringBoot实现微信小程序登录简介SpringBoot后端实现微信登录SpringBoo

uniapp小程序中实现无缝衔接滚动效果代码示例

《uniapp小程序中实现无缝衔接滚动效果代码示例》:本文主要介绍uniapp小程序中实现无缝衔接滚动效果的相关资料,该方法可以实现滚动内容中字的不同的颜色更改,并且可以根据需要进行艺术化更改和自... 组件滚动通知只能实现简单的滚动效果,不能实现滚动内容中的字进行不同颜色的更改,下面实现一个无缝衔接的滚动

Java使用WebView实现桌面程序的技术指南

《Java使用WebView实现桌面程序的技术指南》在现代软件开发中,许多应用需要在桌面程序中嵌入Web页面,例如,你可能需要在Java桌面应用中嵌入一部分Web前端,或者加载一个HTML5界面以增强... 目录1、简述2、WebView 特点3、搭建 WebView 示例3.1 添加 JavaFX 依赖3

防止SpringBoot程序崩溃的几种方式汇总

《防止SpringBoot程序崩溃的几种方式汇总》本文总结了8种防止SpringBoot程序崩溃的方法,包括全局异常处理、try-catch、断路器、资源限制、监控、优雅停机、健康检查和数据库连接池配... 目录1. 全局异常处理2. 使用 try-catch 捕获异常3. 使用断路器4. 设置最大内存和线

Python解决雅努斯问题实例方案详解

《Python解决雅努斯问题实例方案详解》:本文主要介绍Python解决雅努斯问题实例方案,雅努斯问题是指AI生成的3D对象在不同视角下出现不一致性的问题,即从不同角度看物体时,物体的形状会出现不... 目录一、雅努斯简介二、雅努斯问题三、示例代码四、解决方案五、完整解决方案一、雅努斯简介雅努斯(Janu

使用Python创建一个功能完整的Windows风格计算器程序

《使用Python创建一个功能完整的Windows风格计算器程序》:本文主要介绍如何使用Python和Tkinter创建一个功能完整的Windows风格计算器程序,包括基本运算、高级科学计算(如三... 目录python实现Windows系统计算器程序(含高级功能)1. 使用Tkinter实现基础计算器2.

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3