C++ Package继承层次,采用继承实现快递包裹的分类计价(分为空运2日达、陆运3日达)。
一、问题描述:
- Package继承层次,采用继承实现快递包裹的分类计价(分为空运2日达、陆运3日达)。自定义一个或多个快递公司,自定义计价方法,设计合适、合理的界面文本提示,以广东省内某市为起点,采用用户输入目的地点(省份或省份缩写等)、货物重量和快递时效(类型)的方式,计算快递运费,达到做成一个快递运费查询或者发快递的小软件。
- 二、目的:
-
1. 验证private、protect、public继承权限对数据成员和成员函数的权限影响;
2. 掌握继承的优势,采用合适的继承方法,解决实际问题。
-
三、问题具体解决方法:
-
1、首先,创建基类Package,并在构造函数内对变量进行初始化,用a来判断用户所选择的快递为哪个。在各快递函数内定义各种费用。
-
class Package { public:Package(double weight,int a,int b,int c)//Package的构造函数 {weight_m=weight;this->c = c;firstWeight=1;switch(a){case 1: EMS(); break;case 2: YTO(); break;case 3: YUNDA();break;case 4: ZTO(); break;case 5: SF(); break;case 6: STO(); break;}}void EMS()//邮政 {if(c==1)//省内包裹 {LandFreight=6;}else//省外包裹 {LandFreight=8; } continuationWeight_Price=3;AirFreight=10;}void YTO()//圆通 {if(c==1)//省内包裹 {LandFreight=8;}else//省外包裹 {LandFreight=10; } continuationWeight_Price=1.5;AirFreight=12;}void YUNDA()//韵达 {if(c==1)//省内包裹 {LandFreight=8;}else//省外包裹 {LandFreight=10; } continuationWeight_Price=3;AirFreight=9;} void ZTO()//中通 {if(c==1)//省内包裹 {LandFreight=5;}else//省外包裹 {LandFreight=8; } continuationWeight_Price=2;AirFreight=14;}void SF()//顺丰 {if(c==1)//省内包裹 {LandFreight=7;}else//省外包裹 {LandFreight=9; } continuationWeight_Price=2.5;AirFreight=9;}void STO()//申通 {if(c==1)//省内包裹 {LandFreight=10;}else//省外包裹 {LandFreight=12; } continuationWeight_Price=1.5;AirFreight=15;}double getLandFreight(){return LandFreight;}double getAirFreight(){return AirFreight;}double calculateFees(double firstWeight_Price)//计算快递费 {expressFee = firstWeight_Price+ (weight_m - firstWeight)*continuationWeight_Price;return expressFee;} private:double weight_m;//总重量double firstWeight_Price;//首重价格 double continuationWeight_Price;//续重价格 double firstWeight; //首重 double continuationWeight;//续重 double expressFee;//快递费 double LandFreight;//陆运首重价格 double AirFreight;//空运首重价格 int c; };2、空运两日达类,是Package类的派生类,打印输出用户所需支付的快递费用。
-
class twoDayDeliver:protected Package//空运两日达 { public: twoDayDeliver(double weight_,int a_,int b_,int c_):Package(weight_,a_,b_,c_){ }void outputAmount(){cout<<"你所需支付的快递费为(空运): "<<calculateFees(getAirFreight())<<endl;} };3、陆运三日达类,功能同上。
-
class threeDayDeliver:private Package//陆运三日达 { public:threeDayDeliver(double weight_,int a_,int b_,int c_):Package(weight_,a_,b_,c_){ }void outputAmount(){cout<<"你所需支付的快递费为(陆运): "<<calculateFees(getLandFreight())<<endl;} };4、测试类的功能。注意:可以增加多一点交互。
-
int main() {int k;int a;//记录选择的快递公司的代号 int b;//记录选择的寄件方式(空/陆) int c;//记录所寄件的省份的是否为省内 string destination;//记录目的地 double weight;//记录包裹重量 cout<<"********************下面为所提供的快递公司的具体收费情况:********************"<<endl<<"*公司名称(编号): 续重价格: 陆运首重价格(省内/省外): 空运首重价格: *"<<endl <<"*邮政(1) 3/斤 6/8 10 *"<<endl<<"*圆通(2) 1.5/斤 8/10 12 *"<<endl<<"*韵达(3) 3/斤 8/10 9 *"<<endl<<"*中通(4) 2/斤 5/8 14 *"<<endl<<"*顺丰(5) 2.5/斤 7/9 9 *"<<endl<<"*申通(6) 1.5/斤 10/12 15 *"<<endl<<"******************************************************************************"<<endl;cout<<"请输入你想寄的包裹的个数:"<<endl;cin>>k; while(k>0){cout<<"请输入选择的快递公司的代号(1~6):"<<endl;cin>>a;cout<<"请输入所寄包裹的目的地(缩写开头字母):"<<endl;cin>>destination;cout<<"请输入所寄包裹的总重量(以斤为单位):"<<endl;cin>>weight;cout<<"请选择寄件方式(输入编号):1.陆运,2.空运 " <<endl;cin>>b;if(destination=="GD"||destination=="gd")//判断目的地是省内还是省外 {c=1;}else{c=0;} if(b==1)//判断选择的是陆运还是空运并计算运费 { threeDayDeliver t2(weight,a,b,c);//创建了一个threeDayDeliver的对象(陆运) t2.outputAmount(); } else{twoDayDeliver t3(weight,a,b,c);//创建了一个twoDayDeliver的对象(空运)t3.outputAmount();}k--;cout<<endl;} return 0; }四、完整代码。
-
#include<iostream> #include<cstring> using namespace std; class Package { public:Package(double weight,int a,int b,int c)//Package的构造函数 {weight_m=weight;this->c = c;firstWeight=1;switch(a){case 1: EMS(); break;case 2: YTO(); break;case 3: YUNDA();break;case 4: ZTO(); break;case 5: SF(); break;case 6: STO(); break;}}void EMS()//邮政 {if(c==1)//省内包裹 {LandFreight=6;}else//省外包裹 {LandFreight=8; } continuationWeight_Price=3;AirFreight=10;}void YTO()//圆通 {if(c==1)//省内包裹 {LandFreight=8;}else//省外包裹 {LandFreight=10; } continuationWeight_Price=1.5;AirFreight=12;}void YUNDA()//韵达 {if(c==1)//省内包裹 {LandFreight=8;}else//省外包裹 {LandFreight=10; } continuationWeight_Price=3;AirFreight=9;} void ZTO()//中通 {if(c==1)//省内包裹 {LandFreight=5;}else//省外包裹 {LandFreight=8; } continuationWeight_Price=2;AirFreight=14;}void SF()//顺丰 {if(c==1)//省内包裹 {LandFreight=7;}else//省外包裹 {LandFreight=9; } continuationWeight_Price=2.5;AirFreight=9;}void STO()//申通 {if(c==1)//省内包裹 {LandFreight=10;}else//省外包裹 {LandFreight=12; } continuationWeight_Price=1.5;AirFreight=15;}double getLandFreight(){return LandFreight;}double getAirFreight(){return AirFreight;}double calculateFees(double firstWeight_Price)//计算快递费 {expressFee = firstWeight_Price+ (weight_m - firstWeight)*continuationWeight_Price;return expressFee;} private:double weight_m;//总重量double firstWeight_Price;//首重价格 double continuationWeight_Price;//续重价格 double firstWeight; //首重 double continuationWeight;//续重 double expressFee;//快递费 double LandFreight;//陆运首重价格 double AirFreight;//空运首重价格 int c; };class twoDayDeliver:protected Package//空运两日达 { public: twoDayDeliver(double weight_,int a_,int b_,int c_):Package(weight_,a_,b_,c_){ }void outputAmount(){cout<<"你所需支付的快递费为(空运): "<<calculateFees(getAirFreight())<<endl;} };class threeDayDeliver:private Package//陆运三日达 { public:threeDayDeliver(double weight_,int a_,int b_,int c_):Package(weight_,a_,b_,c_){ }void outputAmount(){cout<<"你所需支付的快递费为(陆运): "<<calculateFees(getLandFreight())<<endl;} };int main() {int k;int a;//记录选择的快递公司的代号 int b;//记录选择的寄件方式(空/陆) int c;//记录所寄件的省份的是否为省内 string destination;//记录目的地 double weight;//记录包裹重量 cout<<"********************下面为所提供的快递公司的具体收费情况:********************"<<endl<<"*公司名称(编号): 续重价格: 陆运首重价格(省内/省外): 空运首重价格: *"<<endl <<"*邮政(1) 3/斤 6/8 10 *"<<endl<<"*圆通(2) 1.5/斤 8/10 12 *"<<endl<<"*韵达(3) 3/斤 8/10 9 *"<<endl<<"*中通(4) 2/斤 5/8 14 *"<<endl<<"*顺丰(5) 2.5/斤 7/9 9 *"<<endl<<"*申通(6) 1.5/斤 10/12 15 *"<<endl<<"******************************************************************************"<<endl;cout<<"请输入你想寄的包裹的个数:"<<endl;cin>>k; while(k>0){cout<<"请输入选择的快递公司的代号(1~6):"<<endl;cin>>a;cout<<"请输入所寄包裹的目的地(缩写开头字母):"<<endl;cin>>destination;cout<<"请输入所寄包裹的总重量(以斤为单位):"<<endl;cin>>weight;cout<<"请选择寄件方式(输入编号):1.陆运,2.空运 " <<endl;cin>>b;if(destination=="GD"||destination=="gd")//判断目的地是省内还是省外 {c=1;}else{c=0;} if(b==1)//判断选择的是陆运还是空运并计算运费 { threeDayDeliver t2(weight,a,b,c);//创建了一个threeDayDeliver的对象(陆运) t2.outputAmount(); } else{twoDayDeliver t3(weight,a,b,c);//创建了一个twoDayDeliver的对象(空运)t3.outputAmount();}k--;cout<<endl;} return 0; }五、运行情况展示。
-

相关文章:
C++ Package继承层次,采用继承实现快递包裹的分类计价(分为空运2日达、陆运3日达)。
一、问题描述: Package继承层次,采用继承实现快递包裹的分类计价(分为空运2日达、陆运3日达)。自定义一个或多个快递公司,自定义计价方法,设计合适、合理的界面文本提示,以广东省内某市为起点&…...
中文大语言模型汇总
推荐一篇非常棒的github:Awesome-Chinese-LLM 另附语言模型排行榜:FastChat 里面总结了几乎所有目前主流的中文大语言模型。在此记录一下,方便以后慢慢学习。...
GEE:GEE中实现简单计算器
作者:CSDN _养乐多_ 本文记录了在 Google Earth Engine(GEE)上实现简单计算器的代码。 APP链接:https://949384116.users.earthengine.app/view/simplecalculator 文章目录 一、完整代码二、代码链接 一、完整代码 // 定义初始…...
概念解析 | 神经网络中的位置编码(Positional Encoding)
注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:Positional Encoding 神经网络中的位置编码(Positional Encoding) A Gentle Introduction to Positional Encoding in Transformer Models, Part 1 1.背景介绍 在自然语言处理任…...
【ubuntu】搭建lamp架构
一、准备工作 1、更新源 apt-get updateapt #就是一个管理包的工具,理解为centos中的yum update #表示让apt执行更新的操作,更新的内容为软件列表。#为什么要更新软件列表? 就时本地会隔断时间进行同步镜像站的资源包,但是我…...
GNU ld(链接器)的主要功能
作用: 链接器linker是Bintutils的一种重要工具,负责将编译后的目标文件(.o)合并成一个可执行文件或者共享库。 一、链接器的文件结构可以概括为以下几个关键部分: 输入文件 (Input Files): 输入文件通常是目标文件(.o 文件&#…...
springboot整合FTP实现文件传输
实现ftp文件传输的步骤: 1.ftp绑定ip端口登录 2.切换到指定地址 3.文件下载 4.关闭ftp连接 项目中使用的jar包 <!-- ftp包--><dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><vers…...
Spring Boot 2.x.x 升级至 Spring Boot 3.x.x
小伙伴们,你们好呀,好久不见,我是老寇,跟我一起升级Spring Boot版本 一、JDK 版本 JDK8 需要升级至 JDK17 二、Spring Boot 版本 Spring Boot 2.x.x 升级至 Spring Boot 3.x.x 三、Java Api 变更 javax 变更成 jakarta 四、…...
光电直读水表支持短时间多次抄表吗
传统的水表读数方式已经逐渐无法满足人们对于便捷、准确的需求。为此,光电直读水表应运而生,它凭借出色的读数性能和稳定的准确性,赢得了广大用户的一致好评。那么,光电直读水表支持短时间多次抄表吗?答案是肯定的&…...
家庭私人影院 - Windows搭建Emby媒体库服务器并远程访问 「无公网IP」
文章目录 1.前言2. Emby网站搭建2.1. Emby下载和安装2.2 Emby网页测试 3. 本地网页发布3.1 注册并安装cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar内网穿透本地设置 4.公网访问测试5.结语 1.前言 在现代五花八门的网络应用场景中,观看视频绝对是主力应用场景之一&…...
核心舱在轨飞行VR沉浸式互动体验满足大家宇宙探险的心愿
近日神州十七号载人飞船迎来发射,随着我国载人航天工程进入空间站应用与发展阶段,在轨航天探索和运维工作进入常态化阶段,然而每次出征都牵动着亿万人民的心,对航天航空的好奇和向往也越来越强烈。为了让普通人也能体验乘坐飞船上…...
k8s集群中namespace状态一直显示Terminating
一、问题现象 今天在做测试时,在一个namespace下无法启动pod,查看ns状态一直显示Terminating [rootnode1 ~]# kubectl get ns NAME STATUS AGE configmap Terminating 135d default Active …...
数据库高速缓存配置
数据库一般都配置数据高速缓存,并且可以高速缓存中按页大小分不同的缓冲池。 Oracle: db_cache_size是指db_block_size对应的缓冲池,也可以指定非db_block_size的缓冲池,一般也都会再配置一个32K的缓冲池,两个缓冲池加…...
性能优化之懒加载 - 基于观察者模式和单例模式的实现
一、引入 在前端性能优化中,关于图片/视频等内容的懒加载一直都是优化利器。当用户看到对应的视图模块时,才去请求加载对应的图像。 原理也很简单,通过浏览器提供的 IntersectionObserver - Web API 接口参考 | MDN (mozilla.org),…...
【LeetCode刷题-链表】--1290.二进制链表转整数
1290.二进制链表转整数 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }*…...
搭建Radius认证服务器 安当加密
搭建Radius认证服务器需要完成以下步骤: 安装Radius服务器软件。可以选择使用FreeRadius、Radiusd或WinRadius等开源软件,也可以选择使用商业软件如Cisco或安当ASP等。配置认证数据库。在Radius服务器上配置认证数据库,用于存储用户信息和认…...
Windows11恢复组策略编辑器功能的方法
原因分析 日常工作学习中,对 Windows 计算机上的问题进行故障排除时,有些高级用户经常使用组策略编辑器轻松修复它。通过其分层结构,您可以快速调整应用于用户或计算机的设置。如果搜索结果中缺少组策略编辑器,则可能必须使用注册表编辑器作为疑难解答工具,这是一种更复杂…...
Django实战项目-学习任务系统-查询列表分页显示
接着上期代码框架,6个主要功能基本实现,剩下的就是细节点的完善优化了。 接着优化查询列表分页显示功能,有很多菜单功能都有查询列表显示页面情况,如果数据量多,不分页显示的话,页面展示效果就不太好。 本…...
Git 拉取指定TAG/分支的代码
像其他版本控制系统(VCS)一样,Git 可以给仓库历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点( v1.0 、 v2.0 等等)。 1.创建 tag 标签 $ git tag <tagname&…...
2-爬虫-代理池搭建、代理池使用(搭建django后端测试)、爬取某视频网站、爬取某视频网站、bs4介绍和遍历文档树
1 代理池搭建 2 代理池使用 2.1 搭建django后端测试 3 爬取某视频网站 4爬取某视频网站 5 bs4介绍和遍历文档树 1 代理池搭建 # ip代理-每个设备都会有自己的IP地址-电脑有ip地址---》访问一个网站---》访问太频繁---》封ip-收费:靠谱稳定--提供api-免费ÿ…...
Vue3后台管理系统终极指南:5个关键问题与V3 Admin Vite解决方案
Vue3后台管理系统终极指南:5个关键问题与V3 Admin Vite解决方案 【免费下载链接】v3-admin-vite ☀️ A crafted Vue3 admin template | Vue Admin | Vue Template | Vue3 Admin | Vue3 Template | Vue 后台 | Vue 模板 | Vue3 后台 | Vue3 模板 项目地址: https:…...
别再乱改Rime配置了!先搞懂用户文件夹和程序文件夹的区别(Windows/Ubuntu路径详解)
Rime配置进阶指南:用户文件夹与程序文件夹的深度解析 1. 理解Rime配置的核心架构 Rime输入法以其高度可定制性著称,但这也意味着用户需要对其配置结构有清晰认知。许多初学者在修改配置时常常陷入困惑:为什么我的修改没有生效?为什…...
LinkSwift:九大网盘直链下载的终极解决方案,快速获取真实下载地址
LinkSwift:九大网盘直链下载的终极解决方案,快速获取真实下载地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘…...
GO-Surf:基于神经特征网格的快速高保真三维表面重建技术解析
1. 项目概述:从点云到高保真表面的跨越在三维视觉与机器人领域,从一组稀疏的RGB-D图像序列中,快速、高质量地重建出物体的完整表面模型,一直是一个核心且富有挑战性的任务。传统的基于体素或点云的方法,要么在精度上难…...
2026年终极指南:JetBrains IDE试用期重置完整解决方案
2026年终极指南:JetBrains IDE试用期重置完整解决方案 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter JetBrains IDE试用期重置是每个开发者都可能遇到的挑战,当IntelliJ IDEA、PyCharm、W…...
建模也有Skills了:MWORKS.Sysplorer Skills已开源至MoHub!
智能体能调用建模工具,并不等于它能稳定完成工程建模任务。在真实工程场景中,一个可交付的模型往往要经过需求理解、模型库选择、组件映射、参数补全、检查翻译、仿真验证、结果判读和交付归档。过去,这些环节高度依赖工程师经验;…...
如何快速部署AI视觉瞄准系统:3个版本满足不同需求的终极指南
如何快速部署AI视觉瞄准系统:3个版本满足不同需求的终极指南 【免费下载链接】AI-Aimbot Worlds Best AI Aimbot - CS2, Valorant, Fortnite, APEX, every game 项目地址: https://gitcode.com/gh_mirrors/ai/AI-Aimbot 欢迎来到AI视觉瞄准系统的完整实战教程…...
并发编程小记---5.17
final类型的特点:final 变量:赋值后不能改(引用地址不可变)final 方法:不能被子类重写final 类:不能被继承引用类型:Java 数据类型就两种:基本数据类型:byte short int l…...
C++中函数对象之重载 operator()
如大家所熟悉的,重载 operator() 是 C 中一种特殊机制,允许类的对象像函数一样被调用。这种对象被称为 函数对象(functor) 或 仿函数。核心要点语法形式:在类中定义名为 operator() 的成员函数。调用…...
Hermes Agent 权限分级实战:3 级凭证隔离配置与 4 类越权风险规避
1. 权限不是加个 if 就完事:Hermes Agent 的凭证隔离为什么必须分三级 我第一次在生产环境上线 Hermes Agent 时,给所有子智能体(sub-agent)统一配了同一个数据库只读账号。逻辑很朴素:「反正只读,能出什么问题?」——直到某天凌晨三点,监控告警显示核心订单库被高频扫…...
