C++primer 练习15.15
2016-04-17 01:16
459 查看
// 15_15.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<iostream> #include<string> using namespace std; class Quote { public: Quote() = default; Quote(const string &book,double p):bookNo(book),price(p){} const string& isbn()const { return bookNo; } virtual double net_price(size_t n)const { return n*price; } private: string bookNo; protected: double price = 0.0; }; class Dis_Quote :public Quote { public: Dis_Quote() = default; Dis_Quote(const string &book,double p,size_t n,double d):Quote(book,p),quantity(n),discount(d){} virtual double net_price(size_t n)const = 0; protected: size_t quantity = 0; double discount = 0.0; }; class Bulk_Quote :public Dis_Quote { public: Bulk_Quote() = default; Bulk_Quote(const string &book,double p,size_t n,double d):Dis_Quote(book,p,n,d){} virtual double net_price(size_t n)const override { if (n > quantity) return n*(1 - discount)*price; else return n*price; } }; class Exercise_Quote :public Dis_Quote { public: Exercise_Quote() = default; Exercise_Quote(const string &book,double p,size_t n,double d):Dis_Quote(book,p,n,d){} virtual double net_price(size_t n)const override { if (n <= quantity) return n*(1 - discount)*price; else return quantity*(1 - discount)*price + (n - quantity)*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; } int main() { Quote q1("lidandan", 5); Bulk_Quote q2("lidandan", 5, 9, 0.1); Exercise_Quote q3("lidandan", 5, 9, 0.1); //Dis_Quote q4; print_total(cout, q1, 10); print_total(cout, q2, 10); print_total(cout, q3, 10); return 0; }
相关文章推荐
- [LeetCode]89. Gray Code
- 栈的链表表示
- c++作业3
- c++第3次实验
- Josephus问题
- C++初始化列表
- 正整数的中文读法(C++ Python)
- C++ STL之 vector的capacity和size属性区别
- Memory Leak Detection in C++
- C语言宏定义的使用
- 设计模式中的抽象工厂模式&c++
- 理解汉诺塔
- 第3周 C语言及程序设计初步例程-42 将数据输出到文本文件
- C++中的explicit关键字
- 巩固C语言(六)----数字倒置转换、内存检索、移动窗口、HWND和CWnd、CodeBlocks环境配置
- c++内存分配(new,operator new)详解
- C++中map容器的说明和使用技巧
- c++队问题
- c++类构造函数、析构函数与虚函数之间的那点小事
- [C/C++] 显示各种C/C++编译器的预定义宏(C11标准、C++11标准、VC、BCB、Intel、GCC)