1

【知识点】:多态

函数接口定义:

以Student为基类,构建GroupA, GroupB和GroupC三个类

裁判测试程序样例:

#include<iostream>
#include <string>
using namespace std;/* 请在这里填写答案 */int main()
{const int Size=50;string num, name;int i,ty,s1,s2,s3,s4,s5;char gs;Student *pS[Size];int count=0;for(i=0;i<Size;i++){cin>>ty;if(ty==0) break;cin>>num>>name>>s1>>s2;switch(ty){case 1:pS[count++]=new GroupA(num, name, s1, s2); break;case 2:cin>>gs; pS[count++]=new GroupB(num, name, s1,s2, gs); break;case 3:cin>>s3>>s4>>s5; pS[count++]=new GroupC(num, name, s1,s2,s3,s4,s5); break;}            }for(i=0;i<count;i++) {pS[i]->display();delete pS[i];}return 0;
}

 

【难点】:要记录A,B两类当中平均分最高的人,以便后面A,B类自己比较以及C类比较

【启发点】:用函数来获取A,B类当中的最高分

class Student
{public:string NO;string name;Student(string n,string na):NO(n),name(na){}virtual void display()=0;
};
double getAwardLine();
class GroupA:public Student
{public:static double highestavg;int s1,s2;float avg;GroupA(string n,string na,int a1,int a2):Student(n,na),s1(a1),s2(a2){avg=(s1+s2)/2.0;//先找出A类当中平均分最高的 if(avg>highestavg)highestavg=avg;}double getavg(){return (s1+s2)/2.0;}virtual void display(){if(getavg() == getAwardLine())cout << NO << " " << name << endl;}
};double GroupA::highestavg=0;
class GroupB:public Student
{public:static double highestavg;int s1,s2;char gs;float avg;GroupB(string n,string na,int a1,int a2,char g):Student(n,na),s1(a1),s2(a2),gs(g){avg=(s1+s2)/2.0;//同样找出B类当中平均分最高的 if(avg>highestavg)highestavg=avg;}double getavg(){return (s1+s2)/2.0;}char getgs(){return gs;}virtual void display(){//在B类当中可以直接比较A,B类的最高分哪个更高作为获奖线 double awardLine = (GroupA::highestavg > GroupB::highestavg) ? GroupA::highestavg : GroupB::highestavg;if(getavg()==awardLine||getavg()>=awardLine*0.7&&gs=='A')cout<<NO<<" "<<name<<endl;}
};
double GroupB::highestavg=0;
class GroupC:public Student
{public:int s1,s2,s3,s4,s5;float avg;GroupC(string n,string na,int a1,int a2,int a3,int a4,int a5):Student(n,na),s1(a1),s2(a2),s3(a3),s4(a4),s5(a5){avg=(s1+s2+s3+s4+s5)/5.0;}double getavg(){return(s1+s2+s3+s4+s5)/5.0;}virtual void display(){double awardLine = (GroupA::highestavg > GroupB::highestavg) ? GroupA::highestavg : GroupB::highestavg;if(getavg()>=awardLine*0.9)cout<<NO<<" "<<name<<endl;}};
//使用函数来获取A,B类当中最高分,可以避免在A类中使用B类数据时B类还未完全定义而造成的报错 
double getAwardLine() {return (GroupA::highestavg > GroupB::highestavg) ? GroupA::highestavg : GroupB::highestavg;
}

2

【知识点】:应用虚函数实现多态

 

写各个派生类:

class Drink
{protected:int NO;int amount;//数量public:virtual void display()=0;//输出提供时间Drink(int n,int a):NO(n),amount(a){}
};
//本地茶每份要50秒,其它茶要20秒;
class Tea:public Drink
{public:int area;Tea(int n,int a,int ar):Drink(n,a),area(ar){}virtual void display(){if(area==1)cout<<NO<<" "<<50*amount<<endl;elsecout<<NO<<" "<<20*amount<<endl;}};
//现磨咖啡要加120秒,其它咖啡加20秒;
class Coffee:public Drink
{
public:
int jgdm;
Coffee(int n,int a,int j):Drink(n,a),jgdm(j){}virtual void display(){if(jgdm==1)cout<<NO<<" "<<120*amount<<endl;elsecout<<NO<<" "<<20*amount<<endl;}
};
//牛奶每份10秒。
class Milk:public Drink
{public:Milk(int n,int a):Drink(n,a){}virtual void display(){  cout<<NO<<" "<<10*amount<<endl;}
};

【启发点】:对输入输出的处理

int main()
{//基类的指针数组用来存放各个饮品,数组里的每一个元素都是一个基类指针//基类指针可以指向派生类的对象 Drink *pd[10];int type;int n;int a;int ar;int j;int cnt=0;//对输入的处理 while(cin>>type&&type!=0){if(type==1){cin>>n>>a>>ar;pd[cnt++]=new Tea(n,a,ar);}else if(type==2){cin>>n>>a>>j;pd[cnt++]=new Coffee(n,a,j);}else if(type==3){cin>>n>>a;pd[cnt++]=new Milk(n,a);}}for(int i=0;i<cnt;i++){pd[i]->display();delete pd[i];}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/904281.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/904281.shtml
英文地址,请注明出处:http://en.pswp.cn/news/904281.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scrapy框架之CrawlSpider爬虫 实战 详解

CrawlSpider 是 Scrapy 框架中一个非常实用的爬虫基类&#xff0c;它继承自 Spider 类&#xff0c;主要用于实现基于规则的网页爬取。相较于普通的 Spider 类&#xff0c;CrawlSpider 可以根据预定义的规则自动跟进页面中的链接&#xff0c;从而实现更高效、更灵活的爬取。 Scr…

Glide 如何加载远程 Base64 图片

最近有个需求&#xff0c;后端给出的图片地址并不是正常的 URL&#xff0c;而且需要一个接口去请求&#xff0c;但是返回的是 base64 数据流。这里不关心为啥要这么多&#xff0c;原因有很多&#xff0c;可能是系统的问题&#xff0c;也可能是能力问题。当然作为我们 Android 程…

004-nlohmann/json 快速认识-C++开源库108杰

了解 nlohmann/json 的特点&#xff1b;理解编程中 “数据战场”划分的概念&#xff1b;迅速上手多种方式构建一个JSON对象&#xff1b; 1 特点与安装 nlohmann/json 是一个在 github 长期霸占 “JSON” 热搜版第1的CJSON处理库。它的最大优点是与 C 标准库的容器数据&#xf…

#基础Machine Learning 算法(上)

机器学习算法的分类 机器学习算法大致可以分为三类&#xff1a; 监督学习算法 (Supervised Algorithms&#xff09;:在监督学习训练过程中&#xff0c;可以由训练数据集学到或建立一个模式&#xff08;函数 / learning model&#xff09;&#xff0c;并依此模式推测新的实例。…

正弦波、方波、三角波和锯齿波信号发生器——Multisim电路仿真

目录 Multisim使用教程说明链接 一、正弦波信号发生电路 1.1正弦波发生电路 电路组成 工作原理 振荡频率 1.2 正弦波发生电路仿真分析 工程文件链接 二、方波信号发生电路 2.1 方波发生电路可调频率 工作原理 详细过程 2.2 方波发生电路可调频率/可调占空比 调节占空比 方波产生…

【AND-OR-~OR锁存器设计】2022-8-31

缘由锁存器11111111111-硬件开发-CSDN问答 重置1&#xff0c;不论输入什么&#xff0c;输出都为0&#xff1b; 重置0&#xff0c;输入1就锁住1 此时输入再次变为0&#xff0c;输出不变&#xff0c;为锁住。

力扣-字符串-468 检查ip

思路 考察字符串的使用&#xff0c;还有对所有边界条件的检查 spilt&#xff08;“\.”&#xff09;&#xff0c;toCharArray&#xff0c;Integer.parseInt() 代码 class Solution {boolean checkIpv4Segment(String str){if(str.length() 0 || str.length() > 4) retur…

BC8 十六进制转十进制

题目&#xff1a;BC8 十六进制转十进制 描述 BoBo写了一个十六进制整数ABCDEF&#xff0c;他问KiKi对应的十进制整数是多少。 输入描述&#xff1a; 无 输出描述&#xff1a; 十六进制整数ABCDEF对应的十进制整数&#xff0c;所占域宽为15。 备注&#xff1a; printf可以使用…

ARM子程序和栈

微处理器中的栈由栈指针指向存储器中的栈顶来实现&#xff0c;当数据项入栈时&#xff0c;栈 指针向上移动&#xff0c;当数据项出栈时&#xff0c;栈指针向下移动。 实现栈时需要做出两个决定&#xff1a;一是当数据项进栈时是向低位地址方向向上生 长&#xff08;图a和图b&a…

jwt身份验证和基本的利用方式

前言 &#xff1a; 什么是jwt&#xff08;json web token&#xff09;&#xff1f; 看看英文单词的意思就是 json形式的token 他的基本的特征 &#xff1a; 类似于这样的 他有2个点 分割 解码的时候会有三个部分 头部 payload 对称密钥 这个就是对称加密 头部&am…

n8n工作流自动化平台的实操:利用本地嵌入模型,完成文件内容的向量化及入库

1.成果展示 1.1n8n的工作流 牵涉节点&#xff1a;FTP、Code、Milvus Vector Store、Embeddings OpenAI、Default Data Loader、Recursive Character Text Splitter 12.向量库的结果 2.实操过程 2.1发布本地嵌入模型服务 将bge-m3嵌入模型&#xff0c;发布成满足open api接口…

MATLAB人工大猩猩部队GTO优化CNN-LSTM多变量时间序列预测

本博客来源于CSDN机器鱼&#xff0c;未同意任何人转载。 更多内容&#xff0c;欢迎点击本专栏目录&#xff0c;查看更多内容。 目录 0 引言 1 数据准备 2 CNN-LSTM模型搭建 3 GTO超参数优化 3.1 GTO函数极值寻优 3.2 GTO优化CNN-LSTM超参数 3.3 主程序 4 结语 0 引言…

git项目迁移,包括所有的提交记录和分支 gitlab迁移到gitblit

之前git都是全新项目上传&#xff0c;没有迁移过&#xff0c;因为迁移的话要考虑已有项目上的分支都要迁移过去&#xff0c;提交记录能迁移就好&#xff1b;分支如果按照全新项目上传的方式需要新git手动创建好老git已有分支&#xff0c;在手动一个一个克隆老项目分支代码依次提…

Photo-SLAM论文理解、环境搭建、代码理解与实测效果

前言&#xff1a;第一个解耦式Photo-SLAM&#xff0c;亮点和效果。 参考&#xff1a;https://zhuanlan.zhihu.com/p/715311759 全网最细PhotoSLAM的conda环境配置教程&#xff0c;拒绝环境污染&#xff01;&#xff01;-CSDN博客 1. 环境搭建 硬件&#xff1a;RTX 4090D wi…

如何使用VSCode编写C、C++和Python程序

一、首先准备好前期工作。如下载安装Python、VSCode、一些插件等。写代码之前需要先创建文件夹和文件。 二、将不同语言写的代码放在不同的文件夹中&#xff0c;注意命名时不要使用中文。 三、打开VSCode&#xff0c;点击“文件”->“打开文件夹”->“daimalainxi”->…

基于不确定性感知学习的单图像自监督3D人体网格重建 (论文笔记与思考)

文章目录 论文解决的问题提出的算法以及启发点 论文解决的问题 首先这是 Self-Supervised 3D Human mesh recovery from a single image with uncertainty-aware learning &#xff08;AAAI 2024&#xff09;的论文笔记。该文中主要提出了一个自监督的framework用于人体的姿态…

Leetcode刷题记录33——二叉树的最小深度

题源&#xff1a;https://leetcode.cn/problems/minimum-depth-of-binary-tree/description/ 题目描述&#xff1a; 思路一&#xff1a; 使用 DFS 递归遍历的解法&#xff0c;每当遍历到一条树枝的叶子节点&#xff0c;就会更新最小深度&#xff0c;当遍历完整棵树后&#x…

有效的括号(20)

20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; class Solution { public:bool isValid(string s) {unordered_map<char, char> m {{), (}, {],[}, {}, {}};stack<char> stk;for (int i 0; i < s.size(); i) {if (s[i] ( || s[i…

电子邮件相关协议介绍

0 Preface/Foreword 1 协议介绍 电子邮件包含的主要协议&#xff1a; SMTPPOPIMAP 1.1 SMPT SMPT: Simple Mail Transfer Protocol&#xff0c;电子邮件传输的标准协议&#xff0c;负责将邮件从发送方传输到接收方邮件服务器。 1.2 POP POP&#xff1a; Post Office Protoc…

Linux压缩和解压类

一、gzip/gunzip 压缩 1、基本语法 gzip 文件 &#xff08;功能描述&#xff1a;压缩文件&#xff0c;只能将文件压缩为*.gz文件&#xff09; gunzip 文件.gz &#xff08;功能描述&#xff1a;解压缩文件命令&#xff09; 2、经验技巧 &#xff08;1&#…