zoukankan      html  css  js  c++  java
  • C++primer 练习15.15

    // 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;
    }
  • 相关阅读:
    JZOJ 3034. 【NOIP2012模拟10.17】独立集
    JZOJ 3035. 【NOIP2012模拟10.17】铁轨
    JZOJ 1259. 牛棚安排
    数位DP JZOJ 3316. 非回文数字
    JZOJ 3046. 游戏
    JZOJ 3013. 填充棋盘
    debian 安装oracle提供的java8
    java 汉字转拼音 PinYin4j
    debian ssh设置root权限登陆 Permission denied, please try again
    java并发下订单生成策略
  • 原文地址:https://www.cnblogs.com/csudanli/p/5399977.html
Copyright © 2011-2022 走看看