C++ //练习 15.30 编写你自己的Basket类,用它计算上一个练习中交易记录的总价格。

C++ Primer(第5版) 练习 15.30

练习 15.30 编写你自己的Basket类,用它计算上一个练习中交易记录的总价格。

环境:Linux Ubuntu(云服务器)
工具:vim

 

代码块:
/*************************************************************************> File Name: ex15.30.cpp> Author: > Mail: > Created Time: Tus 25 Jul 2024 09:13:44 AM CST************************************************************************/#include<iostream>
#include<vector>
#include<memory>
#include<set>
using namespace std;class Quote{public:Quote() = default;Quote(const std::string &book, double sales_price): bookNo(book), price(sales_price) {}std::string isbn() const { return bookNo; }virtual double net_price(std::size_t n) const { return n * price; }virtual ~Quote() = default;virtual Quote* clone() const &{ return new Quote(*this); }virtual Quote* clone() && { return new Quote(std::move(*this)); }private:std::string bookNo;protected:double price = 0.0;
};class Disc_quote: public Quote{public:Disc_quote() = default;Disc_quote(const std::string &book, double price, std::size_t qty, double disc): Quote(book, price), quantity(qty), discount(disc) {}double net_price(std::size_t) const = 0;protected:std::size_t quantity = 0;double discount = 0.0;
};class Bulk_quote: public Disc_quote{public:Bulk_quote() = default;Bulk_quote(const std::string& book, double price, std::size_t qty, double disc): Disc_quote(book, price, qty, disc) {}double net_price(std::size_t) const override;Bulk_quote* clone() const & { return new Bulk_quote(*this); }Bulk_quote* clone() && { return new Bulk_quote(std::move(*this)); }
};double Bulk_quote::net_price(size_t cnt) const{if (cnt >= quantity){return cnt * (1 - discount) * price;}else{return cnt * price;}
}double print_total(ostream &os, const Quote &item, size_t n){double ret = item.net_price(n);os<<"ISBN: "<<item.isbn()<<" # sold: "<<n<<" total due: "<<ret<<endl;return ret;
}class Basket {public:void add_item(const Quote& sale){items.insert(std::shared_ptr<Quote>(sale.clone()));}void add_item(Quote&& sale){items.insert(std::shared_ptr<Quote>(std::move(sale).clone()));}double total_receipt(std::ostream&) const;private:static bool compare(const std::shared_ptr<Quote> &lhs, const std::shared_ptr<Quote> &rhs){return lhs->isbn() < rhs->isbn();}std::multiset<std::shared_ptr<Quote>, decltype(compare)*> items{compare};
};double Basket::total_receipt(ostream &os) const{double sum = 0.0;for(auto iter = items.cbegin(); iter != items.cend(); iter = items.upper_bound(*iter)){sum += print_total(os, **iter, items.count(*iter));}os<<"Total Sales: "<<sum<<endl;return sum;
}int main(){Basket obj;obj.add_item(Quote("0-101-13456-X", 10));obj.add_item(Bulk_quote("0-102-34567-Y", 15, 20, 0.5));obj.add_item(Bulk_quote("0-103-32467-X", 5, 30, 0.5));obj.total_receipt(cout);return 0;
}
运行结果显示如下:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构 - 红黑树

文章目录 前言一、红黑树介绍1、红黑树的概念2、红黑树的性质 二、实现红黑树1、基本框架2、插入3、删除4、查找5、测试红黑树6、红黑树代码 三、红黑树性能四、AVL树和红黑树的差别 前言 红黑树是一种二叉搜索树&#xff0c;所以学习前需要学会基本的二叉搜索树&#xff0c;并…

X-AnyLabeling标注软件使用方法

第一步 下载 官方X-AnyLabeling下载地址 github&#xff1a;X-AnyLabeling 第二步 配置环境 使用conda创建新的虚拟环境 conda create -n xanylabel python3.8进入环境 conda activate xanylabel进入X-AnyLabeling文件夹内&#xff0c;运行下面内容 依赖文件系统环境运行环…

昇思MindSpore 应用学习-CycleGAN图像风格迁移互换

日期 心得 昇思MindSpore 应用学习-CycleGAN图像风格迁移互换&#xff08;AI代码学习&#xff09; CycleGAN图像风格迁移互换 模型介绍 模型简介 CycleGAN(Cycle Generative Adversarial Network) 即循环对抗生成网络&#xff0c;来自论文 Unpaired Image-to-Image Trans…

数据中台 | 3分钟带你读懂数据中台的由来

1.数据中台产生的原因 数据中台的概念起源于中国阿里巴巴集团提出的“大中台&#xff0c;小前台”战略。这一理念的核心在于通过构建强大的中台体系&#xff0c;为前端的快速创新和个性化业务需求提供强有力的支持。具体到数据中台&#xff0c;其设计初衷是为了应对企业内部数…

如何解决Windows系统目录权限问题

目录 前言1. 为什么会出现权限问题2. 修改文件权限的步骤2.1 确定目标文件2.2 右键属性设置2.3 更改所有者2.4 修改权限2.5 确认修改 3. 替换文件3.1 拷贝新的文件3.2 验证替换结果 结语 前言 在Windows系统中&#xff0c;时常需要往C盘系统目录下拷贝或者替换文件。然而&…

Java面试还看传统八股文?快来看看这个场景题合集吧【附PDF】

以下就是这份面试场景文档↓ 这里有什么&#xff1f; ↓↓ 1.针对 2024 年面试行情的变化设计的面试场景题以及回答思路 2. 如何快速通过面试的详细攻略 3. 简历优化技巧 1.知己知彼才能百战百胜&#xff0c;如何做好面试前的准备工作 场景题答案以及更多场景题八股文一线大…

Spring Security学习笔记(二)Spring Security认证和鉴权

前言&#xff1a;本系列博客基于Spring Boot 2.6.x依赖的Spring Security5.6.x版本 上一篇博客介绍了Spring Security的整体架构&#xff0c;本篇博客要讲的是Spring Security的认证和鉴权两个重要的机制。 UsernamePasswordAuthenticationFilter和BasicAuthenticationFilter是…

docker 安装单机版redis

把这三个放上去 修改成自己的 按照自己需求来 照图片做 vim redis.conf vim startRedis.sh mv startRedis.sh deployRedis.sh sh deployRedis.sh docker run --privilegedtrue \ --name dev.redis --restartalways \ --network dev-net \ -v ./config/redis.conf:/etc/r…

编译原理期末复习-按考点

编译原理期末复习-按考点 Ocean University of China 第一章 引论 翻译器、编译器、解释器 翻译器&#xff1a;把一种语言变成另外一种语言&#xff08;语义等价&#xff09; 编译器&#xff1a;翻译器的一种 解释器&#xff1a;不产生目标代码&#xff0c;解释执行源程序&a…

24年第三届钉钉杯大学生大数据挑战赛浅析

需要完整资料&#xff0c;请关注WX&#xff1a;“小何数模”&#xff01; 本次钉钉杯大数据挑战赛的赛题已正式出炉&#xff0c;无论是赛题难度还是认可度&#xff0c;该比赛都是仅次于数模国赛的独一档&#xff0c;可以用于国赛前的练手训练。考虑到大家解题实属不易&#xf…

CentOS 7.x 的 YUM 仓库问题

背景 CentOS Linux 7 的生命周期&#xff08;EOL&#xff09;已经于 2024 年 6 月 30 日终止这意味着 CentOS 7.x 的官方镜像站点将不再提供服务&#xff0c;导致在使用 yum 安装或更新程序时可能会遇到 错误。本文将介绍如何解决这一问题&#xff0c;使得你可以继续在 CentOS…

17 敏捷开发—Scrum(2)

从上一篇 「16 敏捷开发实践&#xff08;1&#xff09;」中了解了Scrum是一个用于开发和维护复杂产品的框架&#xff0c;是一个增量的、迭代的开发过程。一般由多个Sprint&#xff08;迭代冲刺&#xff09;组成&#xff0c;每个Sprint长度一般为2-4周。下面全面介绍Scrumde 角色…

[Windows CMD] 查看网络配置 ipconfig

ipconfig 是一个网络命令工具&#xff0c;用于显示所有适配器&#xff08;网络接口&#xff09;的 IPv4 和 IPv6 配置信息。这个命令在 Windows 操作系统中非常常用&#xff0c;也存在于其他一些基于 IP 的网络系统中&#xff0c;如 macOS 和 Linux&#xff08;在这些系统中通常…

Android中广播接收器BroadcastReceiver学习

目录 一 前言二 分类2.1 标准广播2.1.1 动态注册2.1.2 静态注册2.1.3 带权限的标准广播 2.2 有序广播2.3 系统广播 一 前言 BroadcastReceiver是四大组件之一&#xff0c;用于组件间通信&#xff0c;底层是binder机制。注&#xff1a;&#xff08;贴的代码是Compose写的且不规…

unity2D游戏开发07整合游戏

角色类 设置角色类,在Scripts下新建MonoBehaviours文件夹,并将MovementController拖进去 在MonoBehaviours新建c#脚本,命名为Character,双击打开编辑 编写代码 using System.Collections; using System.Collections.Generic; using UnityEngine;public abstract class Ch…

【QT】QT 窗口(菜单栏、工具栏、状态栏、浮动窗口、对话框)

Qt 窗口是通过 QMainWindow类来实现的。 QMainWindow 是一个为用户提供主窗口程序的类&#xff0c;继承自 QWidget 类&#xff0c;并且提供了⼀个预定义的布局。QMainWindow 包含一个菜单栏&#xff08;Menu Bar&#xff09;、多个工具栏&#xff08;Tool Bars&#xff09;、…

2024最新Selenium面试题(附带答案),建议收藏备用

一.你在TestNG中使用了哪些注解&#xff1f; TestBeforeSuiteAfterSuiteBeforeTestAfterTestBeforeClassAfterClassBeforeMethodAfterMethod 二.如何从Excel中读取数据&#xff1f; FileInputStream fs new FileInputStream(“excel文件路径”); Workbook wb WorkbookFact…

LLM模型之基于MindSpore通过GPT实现情感分类

前言 # 该案例在 mindnlp 0.3.1 版本完成适配&#xff0c;如果发现案例跑不通&#xff0c;可以指定mindnlp版本&#xff0c;执行!pip install mindnlp0.3.1 !pip install mindnlp !pip install jieba %env HF_ENDPOINThttps://hf-mirror.com 导入对应的包 import osimport m…

目标检测 YOLOv5-7.0 详细调试自制数据集实战

目标检测 YOLOv5-7.0 详细调试&自制数据集实战 一、项目介绍及环境配置&#xff08;一&#xff09;项目解读&#xff08;二&#xff09;版本选择&#xff08;三&#xff09;环境配置 二、如何利用YOLOv5进行预测&#xff08;detect.py&#xff09;&#xff08;一&#xff0…

计算机毕业设计-程序论文-基于 Java 的高校教资报名系统的设计与实现

本系统开发采用技术为JSP、Bootstrap、Ajax、SSM、Java、Tomcat、Maven 此文章为本人亲自指导加编写&#xff0c;禁止任何人抄袭以及各类盈利性传播&#xff0c; 相关的代码部署论文ppt代码讲解答辩指导文件都有可私要 项目源码&#xff0c;请关注❥点赞收藏并私信博主&#x…