当前位置: 首页 > news >正文

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日达)。

一、问题描述&#xff1a; Package继承层次&#xff0c;采用继承实现快递包裹的分类计价&#xff08;分为空运2日达、陆运3日达&#xff09;。自定义一个或多个快递公司&#xff0c;自定义计价方法&#xff0c;设计合适、合理的界面文本提示&#xff0c;以广东省内某市为起点&…...

中文大语言模型汇总

推荐一篇非常棒的github&#xff1a;Awesome-Chinese-LLM 另附语言模型排行榜&#xff1a;FastChat 里面总结了几乎所有目前主流的中文大语言模型。在此记录一下&#xff0c;方便以后慢慢学习。...

GEE:GEE中实现简单计算器

作者&#xff1a;CSDN _养乐多_ 本文记录了在 Google Earth Engine&#xff08;GEE&#xff09;上实现简单计算器的代码。 APP链接&#xff1a;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 #就是一个管理包的工具&#xff0c;理解为centos中的yum update #表示让apt执行更新的操作&#xff0c;更新的内容为软件列表。#为什么要更新软件列表&#xff1f; 就时本地会隔断时间进行同步镜像站的资源包&#xff0c;但是我…...

GNU ld(链接器)的主要功能

作用&#xff1a; 链接器linker是Bintutils的一种重要工具&#xff0c;负责将编译后的目标文件(.o)合并成一个可执行文件或者共享库。 一、链接器的文件结构可以概括为以下几个关键部分&#xff1a; 输入文件 (Input Files): 输入文件通常是目标文件&#xff08;.o 文件&#…...

springboot整合FTP实现文件传输

实现ftp文件传输的步骤&#xff1a; 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

小伙伴们&#xff0c;你们好呀&#xff0c;好久不见&#xff0c;我是老寇&#xff0c;跟我一起升级Spring Boot版本 一、JDK 版本 JDK8 需要升级至 JDK17 二、Spring Boot 版本 Spring Boot 2.x.x 升级至 Spring Boot 3.x.x 三、Java Api 变更 javax 变更成 jakarta 四、…...

光电直读水表支持短时间多次抄表吗

传统的水表读数方式已经逐渐无法满足人们对于便捷、准确的需求。为此&#xff0c;光电直读水表应运而生&#xff0c;它凭借出色的读数性能和稳定的准确性&#xff0c;赢得了广大用户的一致好评。那么&#xff0c;光电直读水表支持短时间多次抄表吗&#xff1f;答案是肯定的&…...

家庭私人影院 - 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.前言 在现代五花八门的网络应用场景中&#xff0c;观看视频绝对是主力应用场景之一&…...

核心舱在轨飞行VR沉浸式互动体验满足大家宇宙探险的心愿

近日神州十七号载人飞船迎来发射&#xff0c;随着我国载人航天工程进入空间站应用与发展阶段&#xff0c;在轨航天探索和运维工作进入常态化阶段&#xff0c;然而每次出征都牵动着亿万人民的心&#xff0c;对航天航空的好奇和向往也越来越强烈。为了让普通人也能体验乘坐飞船上…...

k8s集群中namespace状态一直显示Terminating

一、问题现象 今天在做测试时&#xff0c;在一个namespace下无法启动pod&#xff0c;查看ns状态一直显示Terminating [rootnode1 ~]# kubectl get ns NAME STATUS AGE configmap Terminating 135d default Active …...

数据库高速缓存配置

数据库一般都配置数据高速缓存&#xff0c;并且可以高速缓存中按页大小分不同的缓冲池。 Oracle&#xff1a; db_cache_size是指db_block_size对应的缓冲池&#xff0c;也可以指定非db_block_size的缓冲池&#xff0c;一般也都会再配置一个32K的缓冲池&#xff0c;两个缓冲池加…...

性能优化之懒加载 - 基于观察者模式和单例模式的实现

一、引入 在前端性能优化中&#xff0c;关于图片/视频等内容的懒加载一直都是优化利器。当用户看到对应的视图模块时&#xff0c;才去请求加载对应的图像。 原理也很简单&#xff0c;通过浏览器提供的 IntersectionObserver - Web API 接口参考 | MDN (mozilla.org)&#xff0c…...

【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认证服务器需要完成以下步骤&#xff1a; 安装Radius服务器软件。可以选择使用FreeRadius、Radiusd或WinRadius等开源软件&#xff0c;也可以选择使用商业软件如Cisco或安当ASP等。配置认证数据库。在Radius服务器上配置认证数据库&#xff0c;用于存储用户信息和认…...

Windows11恢复组策略编辑器功能的方法

原因分析 日常工作学习中,对 Windows 计算机上的问题进行故障排除时,有些高级用户经常使用组策略编辑器轻松修复它。通过其分层结构,您可以快速调整应用于用户或计算机的设置。如果搜索结果中缺少组策略编辑器,则可能必须使用注册表编辑器作为疑难解答工具,这是一种更复杂…...

Django实战项目-学习任务系统-查询列表分页显示

接着上期代码框架&#xff0c;6个主要功能基本实现&#xff0c;剩下的就是细节点的完善优化了。 接着优化查询列表分页显示功能&#xff0c;有很多菜单功能都有查询列表显示页面情况&#xff0c;如果数据量多&#xff0c;不分页显示的话&#xff0c;页面展示效果就不太好。 本…...

Git 拉取指定TAG/分支的代码

像其他版本控制系统&#xff08;VCS&#xff09;一样&#xff0c;Git 可以给仓库历史中的某一个提交打上标签&#xff0c;以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点&#xff08; v1.0 、 v2.0 等等&#xff09;。 1.创建 tag 标签 $ git tag <tagname&…...

2-爬虫-代理池搭建、代理池使用(搭建django后端测试)、爬取某视频网站、爬取某视频网站、bs4介绍和遍历文档树

1 代理池搭建 2 代理池使用 2.1 搭建django后端测试 3 爬取某视频网站 4爬取某视频网站 5 bs4介绍和遍历文档树 1 代理池搭建 # ip代理-每个设备都会有自己的IP地址-电脑有ip地址---》访问一个网站---》访问太频繁---》封ip-收费&#xff1a;靠谱稳定--提供api-免费&#xff…...

动手学深度学习——残差网络ResNet(原理解释+代码详解)

残差网络ResNet 1. 函数类2. 残差块3. ResNet模型4. 训练模型 ResNet为了解决“新添加的层如何提升神经网络的性能”&#xff0c;它在2015年的ImageNet图像识别挑战赛夺魁 它深刻影响了后来的深度神经网络的设计&#xff0c;ResNet的被引用量更是达到了19万。 1. 函数类 假…...

MYSQL 8.0 配置CDC(binlog)

CDC&#xff08;Change Data Capture&#xff09;即数据变更抓取&#xff0c;通过源端数据源开启CDC&#xff0c;ROMA Connect 可实现数据源的实时数据同步以及物理表的物理删除同步。这里介绍通过开启Binlog模式CDC功能。 注意&#xff1a;1、使用MYSQL8.0及以上版本。 2、不…...

软件测试/测试开发丨ChatGPT能否成为PPT最佳伴侣

点此获取更多相关资料 简介 PPT 已经渗透到我们的日常工作中&#xff0c;无论是工作汇报、商务报告、学术演讲、培训材料都常常要求编写一个正式的 PPT&#xff0c;协助完成一次汇报或一次演讲。PPT相比于传统文本的就是有布局、图片、动画效果等&#xff0c;可以给到观众更好…...

java对象的创建过程

一.类的加载与检查 当我们new了一个对象的时候&#xff0c;首先会去检查一下这个指令是否在常量池中存在符号引用&#xff0c;并且检查这个符号引用代表的对象是否被加载&#xff0c;解析初始化过&#xff0c;如果没有就要先去进行类加载过程 二.分配内存 我们通过第一步的检…...

Salesforce创建一个页面,能够配置各种提示语,而不需要修改代码

在Salesforce中创建一个页面&#xff0c;并使其能够配置各种提示语&#xff0c;可以使用自定义设置、自定义对象或自定义标签等方法来实现。以下是一种常见的方法&#xff1a; 自定义对象或自定义设置&#xff1a;您可以创建一个自定义对象或自定义设置来存储各种提示语的信息。…...

轻松管理MySQL权限:Python脚本带你飞

数据库管理是 IT 专家和开发者日常工作中的重要组成部分。一个合适的用户权限管理系统不仅确保了数据的安全性,还能确保数据能够按照预期的方式被正确地访问和修改。在本文中,我们将探讨如何使用 Python 脚本来管理和查询 MySQL 数据库中的用户权限。 用户权限管理:创建或修…...

Py之transformers_stream_generator:transformers_stream_generator的简介、安装、使用方法之详细攻略

Py之transformers_stream_generator&#xff1a;transformers_stream_generator的简介、安装、使用方法之详细攻略 目录 transformers_stream_generator的简介 1、Web Demo T1、original T2、stream transformers_stream_generator的安装 transformers_stream_generator的…...

2023年Zotero最新同步教程-使用TeraCloud的25G免费空间实时跨设备同步文献

文章目录 1. 前言2.1. 注册账号2.1.1. 填写注册信息2.1.2. 创建账号成功2.1.3. 注意2.2. 扩容空间2.3. 打开WebDAV 3. Zotero配置WebDAV同步3.1. 设置网址3.2. 验证服务器3.3. 文件同步成功 4. 结语 1. 前言 Zotero免费版的存储空间是300m&#xff0c;一个图文PDF动辄两三M&am…...

面试题:用宏定义写出swap(x,y),即交换两数。

鼠标选中查看答案↓&#xff1a; #define swap(x,y) do{(x)(x)(y);(y)(x)-(y);(x)(x)-(y);}while(0) 这个题考查宏定义的语法&#xff0c;尤其是多行代码的宏定义&#xff0c;加上do{}while(),,可以保证这些语句只执行一次。...

微服务框架SpringcloudAlibaba+Nacos集成RabbitMQ

目前公司使用jeepluscloud版本&#xff0c;这个版本没有集成消息队列&#xff0c;这里记录一下&#xff0c;集成的过程&#xff1b;这个框架跟ruoyi的那个微服务版本结构一模一样&#xff0c;所以也可以快速上手。 1.项目结构图&#xff1a; 配置类的东西做成一个公共的模块 …...