1. // 15_15.cpp : 定义控制台应用程序的入口点。
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include<iostream>
  6. #include<string>
  7. using namespace std;
  8.  
  9. class Quote
  10. {
  11. public:
  12. Quote() = default;
  13. Quote(const string &book,double p):bookNo(book),price(p){}
  14. const string& isbn()const { return bookNo; }
  15. virtual double net_price(size_t n)const
  16. {
  17. return n*price;
  18. }
  19. private:
  20. string bookNo;
  21. protected:
  22. double price = 0.0;
  23. };
  24.  
  25. class Dis_Quote :public Quote
  26. {
  27. public:
  28. Dis_Quote() = default;
  29. Dis_Quote(const string &book,double p,size_t n,double d):Quote(book,p),quantity(n),discount(d){}
  30. virtual double net_price(size_t n)const = ;
  31. protected:
  32. size_t quantity = ;
  33. double discount = 0.0;
  34. };
  35.  
  36. class Bulk_Quote :public Dis_Quote
  37. {
  38. public:
  39. Bulk_Quote() = default;
  40. Bulk_Quote(const string &book,double p,size_t n,double d):Dis_Quote(book,p,n,d){}
  41. virtual double net_price(size_t n)const override
  42. {
  43. if (n > quantity)
  44. return n*( - discount)*price;
  45. else
  46. return n*price;
  47. }
  48. };
  49.  
  50. class Exercise_Quote :public Dis_Quote
  51. {
  52. public:
  53. Exercise_Quote() = default;
  54. Exercise_Quote(const string &book,double p,size_t n,double d):Dis_Quote(book,p,n,d){}
  55. virtual double net_price(size_t n)const override
  56. {
  57. if (n <= quantity)
  58. return n*( - discount)*price;
  59. else
  60. return quantity*( - discount)*price + (n - quantity)*price;
  61. }
  62. };
  63.  
  64. double print_total(ostream &os, const Quote &item, size_t n)
  65. {
  66. double ret = item.net_price(n);
  67. os << "ISBN: " << item.isbn() <<
  68. " # sold: " << n << " total due: " << ret << endl;
  69. return ret;
  70. }
  71.  
  72. int main()
  73. {
  74. Quote q1("lidandan", );
  75. Bulk_Quote q2("lidandan", , , 0.1);
  76. Exercise_Quote q3("lidandan", , , 0.1);
  77. //Dis_Quote q4;
  78. print_total(cout, q1, );
  79. print_total(cout, q2, );
  80. print_total(cout, q3, );
  81. return ;
  82. }

C++primer 练习15.15的更多相关文章

  1. Python Cookbook(第3版)中文版:15.15 C字符串转换为Python字符串

    15.15 C字符串转换为Python字符串¶ 问题¶ 怎样将C中的字符串转换为Python字节或一个字符串对象? 解决方案¶ C字符串使用一对 char * 和 int 来表示, 你需要决定字符串到 ...

  2. 《C++ Primer》 chapter 15 TextQuery

    <C++ Primer>中第15章为了讲解面向对象编程,举了一个例子:设计一个小程序,能够处理查询给定word在文件中所在行的任务,并且能够处理“非”查询,“或”查询,“与”查询.例如执行 ...

  3. C++ Primer 5th 第15章 面向对象程序设计

    面向对象程序设计的核心思想是:数据抽象.继承和动态绑定. 数据抽象:将类的接口与实现分离: 继承:定义相似类型并对相似关系建模: 动态绑定:一定程度上上忽略相似类型间的区别,用同一方式使用它们. 1. ...

  4. C++ Primer Plus 第15章 友元、异常和其它

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/chudaxiakkk/article/details/30502807 第15章 友元.异常和其它 ...

  5. 《C++ Primer Plus》15.1 友元 学习笔记

    15.1.1 友元类假定需要编写一个模拟电视机和遥控器的简单程序.决定定义一个Tv类和一个Remote类,来分别表示电视机和遥控器.遥控器和电视机之间既不是is-a关系也不是has-a关系.事实上,遥 ...

  6. 【读书笔记】C Primer Plus ch.15位运算 示例程序15.1 整数转换成二进制字符串

    正文: https://www.zybuluo.com/RayChen/note/595213

  7. 《C++ Primer Plus》15.5 类型转换运算符 学习笔记

    C++相对C更严格地限制允许的类型转换,并添加4个类型转换运算符,是转换过程更规范:* dynamic_cast:* const_cast:* static_cast:* reinterpret_ca ...

  8. 《C++ Primer Plus》15.4 RTTI 学习笔记

    运行时类型识别RTTI(Runtime Type Identification) C++有三个支持RTTI的元素.* 如果可能的话,dynamic_cast运算符将使用一个指向基类的指针来生成一个指向 ...

  9. [C++]PAT乙级1011. A+B和C (15/15)

    /* 1011. A+B和C (15) 给定区间[-2^31, 2^31]内的3个整数A.B和C,请判断A+B是否大于C. 输入格式: 输入第1行给出正整数T(<=10),是测试用例的个数.随后 ...

随机推荐

  1. 【转】纯CSS设置Checkbox复选框控件的样式

    Checkbox复选框是一个可能每一个网站都在使用的HTML元素,但大多数人并不给它们设置样式,所以在绝大多数网站它们看起来是一样的.为什么不把你的网站中的Checkbox设置一个与众不同的样式,甚至 ...

  2. TKinter布局之grid 网格布局

    1.由于我们的程序大多数都是矩形,因此特别适合于网格 布局,也就是 grid 布局. 2.使用 grid 布局的时候,我们使用 grid 函数,在里面指 定两个参数,用 row 表示行,用 colum ...

  3. 实时监听输入框值变化的完美方案:oninput & onpropertychange

    实时监听输入框值变化的完美方案:oninput & onpropertychange: 网址:http://www.cnblogs.com/lhb25/archive/2012/11/30/o ...

  4. Python文件处理之文件写入方式与写缓存(三)

    Python的open的写入方式有: write(str):将str写入文件 writelines(sequence of strings):写多行到文件,参数为可迭代对象 首先来看下writelin ...

  5. MySQL explain key_len 大小的计算

    总结: 变长字段需要额外的2个字节,固定长度字段不需要额外的字节.而null都需要1个字节的额外空间,所以以前有个说法:索引字段最好不要为NULL,因为NULL让统计更加复杂,并且需要额外一个字节的存 ...

  6. spring基础部分——注解

    注解: @Entity @Table @Column @Enumerated @Autowired @Controller @RequestMapping @RequestParam

  7. Android monkey介绍

    Android monkey介绍 原文地址 1 简略 monkey是android下自动化测试比较重要的的一个工具,该工具可以运行在host端或者设备(模拟器或真实设备).它会向系统发送随机事件流(即 ...

  8. [mysql] mysql 5.6.X 慢查询日志

    慢查询日志 一篇好文章,学习保存.... 打开慢查询日志 慢查询日志,顾名思义就是记录执行比较慢查询的日志. 查看是否开启慢查询日志: show variables like '%slow%'; 打开 ...

  9. (转帖)BootStrap入门教程 (二)

    上讲回顾:Bootstrap的手脚架(Scaffolding)提供了固定(fixed)和流式(fluid)两种布局,它同时建立了一个宽达940px和12列的格网系统. 基于手脚架(Scaffoldin ...

  10. struts checkbox选中

    <input type="checkbox" id="something" name="something" /> ↓ < ...