/******************************************************************** *created: 2010/01/23 *created: 23:1:2010 9:35 *filename: d:/svn/cpp_primer_charpter_15/cpp_test/Basket.h *author: WWQ *purpose: 购物框类 *********************************************************************/ #pragma once #include "Sales_item.h" #include <set> class Basket { //定义multiset的比较函数 typedef bool (*Comp)(const Sales_item&,const Sales_item&); public: //make it easir to type of our set typedef std::multiset<Sales_item,Comp>set_type; //typedefs modeled after corresponding contanier types typedef set_type::size_type size_type; typedef set_type::const_iterator const_iter; Basket():items(compare){}//initialze the comparator void add_item(const Sales_item &item){items.insert(item);} size_type size(const Sales_item &i) const { return items.count(i); } double total() const;//sum of net prices for all items in the basket private: std::multiset<Sales_item,Comp> items; };
/******************************************************************** *created: 2010/01/23 *created: 23:1:2010 10:18 *filename: Basket.cpp *author: WWQ *purpose: *********************************************************************/ #include "Basket.h" double Basket::total() const {//返回购物篮中所有物品的价格 double sum=0; for (const_iter iter=items.begin(); iter!=items.end(); iter=items.upper_bound(*iter)) { sum+=(*iter)->net_price(items.count(*iter)); } return sum; }
/******************************************************************** *created: 2010/01/21 *created: 21:1:2010 20:12 *filename: d:/svn/cpp_primer_charpter_15/cpp_test/Bulk_item.h *author: WWQ *purpose: 折扣类 *********************************************************************/ #pragma once #include <iostream> #include "item_base.h" class Bulk_item : public Item_base { public: Bulk_item(const std::string& book = "", double sales_price = 0.0, size_t qty = 0, double disc_rate = 0.0): Item_base(book, sales_price), min_qty(qty), discount(disc_rate) { std::cout << "Bulk_item(const std::string &,double, size_t,double)" << std::endl; } //重定义基类版本 double net_price(size_t cnt) const { if (cnt >= min_qty) { return cnt*(1 - discount)*price; } else { return cnt*price; } } //复制控制函数 Bulk_item(const Bulk_item &b): Item_base(b), min_qty(b.min_qty), discount(b.discount) { std::cout << "Bulk_item(const Bulk_item&)" << std::endl; } Bulk_item& operator=(const Bulk_item &rhs) { if (this != &rhs) Item_base::operator=(rhs); min_qty=rhs.min_qty; discount=rhs.discount; std::cout<<"Bulk_item::operator="<<std::endl; return *this; } //////////////////////////////// Bulk_item * clone() const{ return new Bulk_item(*this); } //////////////////////////////// virtual ~Bulk_item(void) { std::cout<<"~Bulk_item()"<<std::endl; } private: size_t min_qty;//可打折的最小购买量 double discount;//折扣率 };
/******************************************************************** *created: 2010/01/21 *created: 21:1:2010 14:20 *filename: d:/svn/CPP_test/cpp_test/cpp_test/Disc_item.h *author: WWQ *purpose: Class to hold discount and quantity derived classes will implement pricing strategies using these data 保存折扣率和可实行折扣策略的数量 派生类将使用这些数据实现定价策略 *********************************************************************/ #pragma once #include <iostream> #include "item_base.h" class Disc_item : public Item_base { public: Disc_item(const std::string& book = "", double sales_prive = 0.0, std::size_t qty = 0, double disc_rate = 0.0): Item_base(book, sales_prive), quantity(qty), discount(disc_rate) {} double net_price(std::size_t) const=0;//定义为虚函数 //for debug virtual void debug(std::ostream & os = std::cout ) const { Item_base::debug(os); os<<"/t"<<quantity<<"/t"<<discount; } protected: std::size_t quantity;//purchase size for discount to apply double discount;//fractional discount to apply };
/******************************************************************** *created: 2010/01/21 *created: 21:1:2010 20:15 *filename: d:/svn/cpp_primer_charpter_15/cpp_test/Item_base.h *author: WWQ *purpose: 图书管理的基类 *********************************************************************/ #pragma once #include <fstream> #include <iostream> #include <string> class Item_base { public: Item_base(const std::string &book = "", double sales_price = 0.0): isbn(book), price(sales_price) { std::cout << "Item_base(const std::string &,double)" << std::endl; } std::string book()const { return isbn; } virtual double net_price(size_t n) const {//返回特定购书量的总价格 return n*price; } Item_base(const Item_base& ib): isbn(ib.isbn), price(ib.price) { //复制控制成员 std::cout << "Item_base(const Item_base&)" << std::endl; } Item_base& operator=(const Item_base& rhs) { isbn = rhs.isbn; price = rhs.price; std::cout << "Item_base::operator=()" << std::endl; return *this; } ///////////////////////// virtual void debug(std::ostream & os = std::cout) const { os << isbn << "/t" << price;//这里出错了 } virtual Item_base* colone() const { return new Item_base(*this); } ////////////////////// virtual ~Item_base(void) { std::cout << "~Item_base()" << std::endl; } private: std::string isbn; protected: double price; };
/******************************************************************** *created: 2010/01/21 *created: 21:1:2010 16:53 *filename: d:/svn/CPP_test/cpp_test/cpp_test/Lds_item.h *author: WWQ *purpose: 限价折扣类 *********************************************************************/ #pragma once #include "item_base.h" class Lds_item : public Item_base { public: Lds_item(const std::string &book="", double sales_price=0.0, size_t qty=0,double disc_rate=0.0): Item_base(book,sales_price),max_qty(qty),discount(disc_rate){} double net_price(size_t cnt) const; Lds_item *clone()const { return new Lds_item(*this); } private: size_t max_qty;//可折扣的购书量上限 double discount;//折扣率 };
/******************************************************************** *created: 2010/01/23 *created: 23:1:2010 10:20 *filename: Lds_item.cpp *author: WWQ *purpose: *********************************************************************/ #include "Lds_item.h" double Lds_item::net_price( size_t cnt ) const { if (cnt<=max_qty) { return cnt*(1-discount)*price; } else { return cnt*price-max_qty*discount*price; } }
/******************************************************************** *created: 2010/01/21 *created: 21:1:2010 15:47 *filename: d:/svn/CPP_test/cpp_test/cpp_test/Sales_item.h *author: WWQ *purpose: 句柄类 *********************************************************************/ #pragma once //#include <iostream> #include <stdexcept> #include "Item_base.h" using namespace std; class Sales_item { public: Sales_item(void): p(0),//指针置0,表示没有关联任何对象 use(new std::size_t(1)){}//分配一个新的计数器 Sales_item(const Item_base &); Sales_item(const Sales_item &i): p(i.p), use(i.use) { ++*use; } ~Sales_item() { decr_use(); } Sales_item& operator=(const Sales_item&); const Item_base *operator->() const//等价于:(operator->)(),注意:不接受参数,P445 { if (p) return p;//返回该对象的一个指针 else throw std::logic_error("unbound Sales_item"); } const Item_base& operator*() const { if (p) return *p; else throw std::logic_error("unbound Sales_item"); } private: Item_base *p;//pointer to shared item std::size_t *use;//ponter to shared use count //called by both destructor and assignment operator to free pointers void decr_use() { if (--*use == 0) { delete p; delete use; } } }; inline bool compare(const Sales_item &lhs, const Sales_item &rhs) { return lhs->book() < rhs->book(); }
/******************************************************************** *created: 2010/01/21 *created: 21:1:2010 16:03 *filename: d:/svn/CPP_test/cpp_test/cpp_test/Sales_item.cpp *author: WWQ *purpose: 句柄类 实现文件 *********************************************************************/ #include "Sales_item.h" Sales_item& Sales_item::operator=( const Sales_item & rhs) { ++*rhs.use;//防止自身赋值 decr_use(); p = rhs.p; use = rhs.use; return *this; } Sales_item::Sales_item( const Item_base& item ): p(item.colone()),use(new std::size_t(1)) { }
/******************************************************************** *created: 2010/01/22 *created: 22:1:2010 9:49 *filename: d:/svn/cpp_primer_charpter_15/cpp_test/P509.cpp *author: WWQ *purpose: 练习cpp_primer 第509页的内容 习题15.35 *********************************************************************/ #include <iostream> #include "Sales_item.h" #include "Basket.h" #include "Bulk_item.h" #include "Lds_item.h" using namespace std; int main() { Basket basket; Sales_item item1(Bulk_item("7-115-14554-7", 99, 20, 0.2)); Sales_item item2(Item_base("7-115-14554-8", 39)); Sales_item item3(Lds_item("7-115-14554-9", 50, 200, 0.2)); Sales_item item4(Bulk_item("7-115-14554-7", 99, 20, 0.2)); basket.add_item(item1); basket.add_item(item2); basket.add_item(item3); basket.add_item(item4); cout << "--------------------------------" << endl; cout << "总价格是:"; cout << (basket.total()) << endl; cout << "--------------------------------" << endl; return 0; }
您还没有登录,请您登录后再发表评论
6. C++标准库:文件提到了C++标准库类型,如标准输入输出库,标准库类型在C++程序中提供了一系列基础的工具和功能,如输入输出流、标准容器、泛型算法等。 7. 关键概念理解:文件内容中还包含了对一些关键概念的...
C++ Primer习题集 第5版-Stanley B. Lippman_高清版[带完整书签目录] 【作 者】(美)李普曼,(美)拉乔伊,(美)默著 【出版发行】 北京:电子工业出版社 , 2015.03 【ISBN号】978-7-121-25229-7 【页 数】 520 ...
《C++ Primer 习题解答(第4版)》是一本深入C++编程语言的实践指导书籍,由Lippman, Lajoie, 和 Moo三位专家编写。这本习题解答是针对C++ Primer(第四版)教材的,旨在帮助读者巩固和深化对C++的理解。在学习C++的...
C++ Primer编程习题集(第5版),有习题和编程代码,供自我检验使用
### C++ Primer 第五版习题答案解析 #### Exercise 1.1 **题目描述:** 审查您的编译器文档并确定它使用的文件命名约定。编译并运行第2页上的主程序。 - Windows - Linux **解析:** 本题考查的是编译器对于文件名...
《C++ Primer(第4版)》是一本深入学习C++编程语言的经典教材,其课后习题答案提供了丰富的实践练习和问题解析,帮助读者巩固并深化对C++语法、概念的理解。以下将针对各章节的主要知识点进行详细阐述: 1. 第一章...
此外,描述中提及的“真正的C++primer习题集”,这可能表明该习题集是针对教材内容设计的,目的是帮助学生消化和练习书中的理论知识。通过解决这些习题,学生可以加深对C++语言特性的理解,包括类和对象、动态内存...
《C++ Primer》第五版是C++领域内极具权威...总之,《C++ Primer》第五版通过上述的习题和答案,为读者提供了一条系统的C++学习路径,既注重理论知识的讲解,又强调实践技能的锻炼,是学习C++语言不可或缺的重要资源。
第18章作为《C++ Primer》全书的一部分,通常包含了该书中特定的专题。习题答案是指针对这一章节练习题的具体解答。这些练习题被设计用来加深读者对于章节内容的理解和应用,包含编程实践、问题解析、算法设计等多...
习题答案部分则是对这些练习题给出的解答,可以帮助学生和自学者检查和理解自己的解题过程是否正确,以及是否有更好的解决方式。由于这些答案是由个人通过OCR扫描获得的,并非官方提供,可能存在识别错误或漏识别的...
### C++ Primer习题集(第5版) #### 书籍概述 《C++ Primer》第五版是一本权威的C++编程教程,由Stanley B. Lippman、Josée Lajoie与Barbara E. Moo共同编著。本书旨在帮助读者深入理解C++语言的核心概念及其...
《C++ Primer Plus》是一本深受程序员喜爱的C++学习书籍,它涵盖了C++语言的基础到高级主题。这本书的课后练习题是检验和巩固学习成果的重要环节。这些练习题旨在帮助读者理解并掌握C++的关键概念和技术,包括基本...
《C++ Primer Plus》是一本深受程序员喜爱的C++学习书籍,它深入浅出地介绍了C++编程语言的基础和高级特性。课后习题是学习过程中不可或缺的一部分,它们旨在帮助读者巩固理论知识,提高实际编程技能。这个压缩包...
C++ Primer Plus 课后编程练习题答案 C++ Primer Plus 是一本经典的 C++ 程序设计教材,旨在帮助读者学习 C++ 语言的基础知识和高级编程技术。本书涵盖了 C++ 语言的所有方面,包括基本语法、数据类型、函数、数组...
最后,"C++Primer第一章练习题答案"是对这些例题的解答,提供了正确的代码实现。这对于初学者来说非常有价值,因为他们可以直接比较自己的解决方案,找出错误或不足,从而加速学习进程。此外,通过分析答案,读者...
《C++ Primer 第四版》是一本经典的C++学习书籍,涵盖了从基础到高级的各种主题。这份课后习题解答提供了第1至18章的完整答案,旨在帮助读者深入理解书中的概念并提高编程技能。 第一章“快速入门”引导读者进入C++...
《C++ Primer习题答案(完整版)》是一份全面涵盖C++ Primer一书所有章节习题解答的宝贵资源。这份资源的出现弥补了网络上通常只提供前5章答案的局限,使得学习者能够得到全书习题的详尽解答,从而更深入地理解和掌握...
根据提供的文件信息,文件标题为“c++primer第五版习题答案(第13章)”,描述提到这是“c++primer第五版中文版课后答案(第13章)”的PDF格式文件,且这些答案来自书籍的习题集。同时,文件内容是通过OCR技术从纸质...
《C++ Primer Plus 第6版 中文版》是一本深入浅出的C++学习书籍,其课后代码习题答案是学习过程中不可或缺的部分。这本书旨在帮助读者从零基础开始掌握C++编程语言,通过实例和习题来巩固理论知识,提升编程技能。...
从提供的文件信息中,我们可以提炼出一系列与C++编程语言相关的知识点。以下是这些知识点的详细说明: 1. C++程序结构:C++程序通常由两类文件组成,即头文件和源文件。头文件通常用于声明接口,如类、函数原型等,...
相关推荐
6. C++标准库:文件提到了C++标准库类型,如标准输入输出库,标准库类型在C++程序中提供了一系列基础的工具和功能,如输入输出流、标准容器、泛型算法等。 7. 关键概念理解:文件内容中还包含了对一些关键概念的...
C++ Primer习题集 第5版-Stanley B. Lippman_高清版[带完整书签目录] 【作 者】(美)李普曼,(美)拉乔伊,(美)默著 【出版发行】 北京:电子工业出版社 , 2015.03 【ISBN号】978-7-121-25229-7 【页 数】 520 ...
《C++ Primer 习题解答(第4版)》是一本深入C++编程语言的实践指导书籍,由Lippman, Lajoie, 和 Moo三位专家编写。这本习题解答是针对C++ Primer(第四版)教材的,旨在帮助读者巩固和深化对C++的理解。在学习C++的...
C++ Primer编程习题集(第5版),有习题和编程代码,供自我检验使用
### C++ Primer 第五版习题答案解析 #### Exercise 1.1 **题目描述:** 审查您的编译器文档并确定它使用的文件命名约定。编译并运行第2页上的主程序。 - Windows - Linux **解析:** 本题考查的是编译器对于文件名...
《C++ Primer(第4版)》是一本深入学习C++编程语言的经典教材,其课后习题答案提供了丰富的实践练习和问题解析,帮助读者巩固并深化对C++语法、概念的理解。以下将针对各章节的主要知识点进行详细阐述: 1. 第一章...
此外,描述中提及的“真正的C++primer习题集”,这可能表明该习题集是针对教材内容设计的,目的是帮助学生消化和练习书中的理论知识。通过解决这些习题,学生可以加深对C++语言特性的理解,包括类和对象、动态内存...
《C++ Primer》第五版是C++领域内极具权威...总之,《C++ Primer》第五版通过上述的习题和答案,为读者提供了一条系统的C++学习路径,既注重理论知识的讲解,又强调实践技能的锻炼,是学习C++语言不可或缺的重要资源。
第18章作为《C++ Primer》全书的一部分,通常包含了该书中特定的专题。习题答案是指针对这一章节练习题的具体解答。这些练习题被设计用来加深读者对于章节内容的理解和应用,包含编程实践、问题解析、算法设计等多...
习题答案部分则是对这些练习题给出的解答,可以帮助学生和自学者检查和理解自己的解题过程是否正确,以及是否有更好的解决方式。由于这些答案是由个人通过OCR扫描获得的,并非官方提供,可能存在识别错误或漏识别的...
### C++ Primer习题集(第5版) #### 书籍概述 《C++ Primer》第五版是一本权威的C++编程教程,由Stanley B. Lippman、Josée Lajoie与Barbara E. Moo共同编著。本书旨在帮助读者深入理解C++语言的核心概念及其...
《C++ Primer Plus》是一本深受程序员喜爱的C++学习书籍,它涵盖了C++语言的基础到高级主题。这本书的课后练习题是检验和巩固学习成果的重要环节。这些练习题旨在帮助读者理解并掌握C++的关键概念和技术,包括基本...
《C++ Primer Plus》是一本深受程序员喜爱的C++学习书籍,它深入浅出地介绍了C++编程语言的基础和高级特性。课后习题是学习过程中不可或缺的一部分,它们旨在帮助读者巩固理论知识,提高实际编程技能。这个压缩包...
C++ Primer Plus 课后编程练习题答案 C++ Primer Plus 是一本经典的 C++ 程序设计教材,旨在帮助读者学习 C++ 语言的基础知识和高级编程技术。本书涵盖了 C++ 语言的所有方面,包括基本语法、数据类型、函数、数组...
最后,"C++Primer第一章练习题答案"是对这些例题的解答,提供了正确的代码实现。这对于初学者来说非常有价值,因为他们可以直接比较自己的解决方案,找出错误或不足,从而加速学习进程。此外,通过分析答案,读者...
《C++ Primer 第四版》是一本经典的C++学习书籍,涵盖了从基础到高级的各种主题。这份课后习题解答提供了第1至18章的完整答案,旨在帮助读者深入理解书中的概念并提高编程技能。 第一章“快速入门”引导读者进入C++...
《C++ Primer习题答案(完整版)》是一份全面涵盖C++ Primer一书所有章节习题解答的宝贵资源。这份资源的出现弥补了网络上通常只提供前5章答案的局限,使得学习者能够得到全书习题的详尽解答,从而更深入地理解和掌握...
根据提供的文件信息,文件标题为“c++primer第五版习题答案(第13章)”,描述提到这是“c++primer第五版中文版课后答案(第13章)”的PDF格式文件,且这些答案来自书籍的习题集。同时,文件内容是通过OCR技术从纸质...
《C++ Primer Plus 第6版 中文版》是一本深入浅出的C++学习书籍,其课后代码习题答案是学习过程中不可或缺的部分。这本书旨在帮助读者从零基础开始掌握C++编程语言,通过实例和习题来巩固理论知识,提升编程技能。...
从提供的文件信息中,我们可以提炼出一系列与C++编程语言相关的知识点。以下是这些知识点的详细说明: 1. C++程序结构:C++程序通常由两类文件组成,即头文件和源文件。头文件通常用于声明接口,如类、函数原型等,...