# 编写`Basket`类

news/2024/10/15 14:22:33/

编写Basket

    class Basket{public://Basket使用合成的默认构造函数和拷贝控制成员void add_item(const std::shared_ptr<Quote> &sale){items.insert(sale);}//打印每本书的总价和购物篮中所有书的总价double total_receipt(std::ostream&) const;private://该函数用于比较shared_ptr,multiset成员会用到它static bool compare(const std::shared_ptr<Quote> &lhs,const std::shared_ptr<Quote> &rhs){return lhs->isbn() < rhs->isbn();}//multiset保存多个报价,按照compare成员排序std::multiset<std::shared_ptr<Quote>,decltype(compare)*>item{compare};};double Basket::total_receipt(ostream &os) const{double sum = 0.0;   //保存实时计算出的总价格//iter指向ISBN相同的一批元素中的第一个//upper_bound返回一个迭代器,该迭代器指向这批元素的尾后位置for(auto iter = items.cgegin();iter != items.cend();iter = items.upper_bound(*iter)){//我们知道在当前的Basket中至少有一个该关键字的元素///打印概述及对应的项目sum += print_total(os,**iter,items.count(*iter));}os<<"Total Sale: "<<sum<<endl;//打印最终的总价格return sum;}

模拟虚拟拷贝

class Quote{public://该虚函数返回当前对象的一份动态分配的拷贝//这些成员使用的引用限定符virtual Quote* clone() const & {return new Quote(*this);}virtual Quote* clone() &&{return new Quote(std::move(*this));}
};class Bulk_quote : public Quote{Bulk_quote* clone() const & {return new Bulk_quote(*this);}Bulk_quote* clone() && {return new Bulk_quote(std::move(*this));}
};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()));}
};

http://www.ppmy.cn/news/981138.html

相关文章

“深入解析Spring Boot:从入门到精通的完整指南“

标题&#xff1a;深入解析Spring Boot&#xff1a;从入门到精通的完整指南 摘要&#xff1a;本文将深入解析Spring Boot框架&#xff0c;从入门到精通&#xff0c;为读者提供全面的指南。我们将介绍Spring Boot的基本概念、核心特性以及使用方法&#xff0c;并通过示例代码演示…

Docker:Docker-Compose

Docker:Docker-Compose 一、Docker-Compose 介绍1.1 Docker-Compose 概述二、Docker-Compose 安装2.1 Docker Compose 环境安装2.2 下载2.3 安装三、Docker-Compose 使用3.1 YAML 文件格式及编写注意事项3.2 使用 YAML 时需要注意下面事项3.3 Docker-Compose配置常用字段3.4 D…

NOI Linux 2.0 CSP奥赛复赛环境安装使用指南

新人旧人区别 以下是可能导致你在老版 NOI Linux 系统下形成的习惯在新版下翻车的改动。 移除了 GUIDE从 32bit 变为了 64bit 系统&#xff0c;需要注意指针现在占 8 字节而不是 4 字节更新了编译器版本默认情况下右键没了【新建文件】的选项桌面目录改为中文&#xff0c;可能…

因材施教,有道发布“子曰”教育大模型,落地虚拟人口语教练等六大应用

因材施教的教育宗旨下&#xff0c;大模型浪潮中&#xff0c;网易有道凭借其对教育场景的深入理解和对商业化的理性思考&#xff0c;为行业树立了垂直大模型的典范。 7月26日&#xff0c;教育科技公司网易有道举办了“powered by 子曰”教育大模型应用成果发布会。会上重磅推出了…

vue项目开发环境和生产环境代理的配置问题

1.跨域 跨域解决方案&#xff1a; 1.JSONP 通过动态 script标签跨域 2.document.domain iframe跨域 3.location.hash iframe 4.window.name iframe跨域 5.postMessage 跨 window 通信 6.跨域资源共享&#xff08;CORS&#xff09; 7.nginx代理跨域 8.nodejs中间件代理跨域 9…

使用 OpenCV 和 GrabCut 算法进行交互式背景去除

一、说明 我想&#xff0c;任何人都可以尝试从图像中删除背景。当然&#xff0c;有大量可用的软件或工具能够做到这一点&#xff0c;但其中一些可能很昂贵。但是&#xff0c;我知道有人使用窗口绘画3D魔术选择或PowerPoint背景去除来删除背景。 如果您是计算机视觉领域的初学者…

Linux 内核 ASoC 基本数据结构

Linux 内核 ASoC 框架建立了新的抽象&#xff0c;并通过一些中间层&#xff0c;将这些抽象接入 ALSA 音频框架。 Linux 内核 ASoC 设备驱动的结构如下图&#xff1a; Linux 内核 ASoC 设备驱动程序在 Linux 内核中扮演多个角色。 Linux 内核 ASoC 设备驱动程序在初始化阶段向…

服务器推送、在线游戏和电子邮件背后的网络协议

之前也聊了不少网络协议这块内容&#xff0c;现在我们将深入探讨关键的网络协议及其在不同应用中的作用。重点在于理解这些协议如何塑造我们在互联网上的通信和互动方式。我们将深入研究以下领域&#xff1a; WebSocket 在之前的讨论中&#xff0c;我们研究了HTTP及其在客户端和…