某出版社可出版图书和磁带。其中图书按照每页的价格乘以页数进行定价,磁带根据每10分钟的价格乘以磁带录音的分钟数进行定价。请定义Publicatioin、Book、Tape以及BookStore四个类。其中:

1. Publication类:

1)数据成员double price表示单价(对于书,是每页的价格;对于磁带,是每10分钟录音的价格)。

2)数据成员int length表示出版物的长度,对于书,是页数;对于磁带, 是分钟数。

3)成员函数getTotalPrice()用于返回一个出版物的定价。

4)构造函数Publication(double, int)用于构造一个出版物。

5)成员函数double getPrice() const和int getLength()用于返回出版物的单价及长度。

6)析构函数。

2. Book类是Publication的子类。

1)构造函数Book(double,int)。

2)重写父类的getTotalPrice返回定价,定价为单价乘以长度(即页数)。

3)析构函数。

3. Tape是Publication的子类:

1)构造函数Tape(double,int)。

2)重写父类的getTotalPrice返回定价。注意:price属性是每10分钟录音的单价,而磁带的长度不一定是10的整数倍。计算定价时,不足10分钟部分,按照10分钟计算。

3)析构函数。

4.BookStore是书店,具有数据成员Publications **pubs,是书店拥有的出版物列表;int num表示书店拥有的出版物数量。成员函数int getNumOfBook()和int getNumOfTape()分别计算书店中拥有的Book和Tape的数量。该类已经在appcode code中给出。

Input

输入分多行。

第一行是整数M>0,表示有M个测试用例。

每个测试占一行,分为三部分:第一部分是出版物类型(B表示Book,T表示Tape)、单价和数量(页数或分钟数)。

Output

见样例。

Sample Input

3 B 0.10 201 T 0.50 100 T 0.40 105

Sample Output

Call Publication's constructor! Call Book's constructor! Call Publication's constructor! Call Tape's constructor! Call Publication's constructor! Call Tape's constructor! Call Publication's constructor! Call Book's constructor! Call Publication's constructor! Call Tape's constructor! Call Publication's constructor! Call Tape's constructor! There are 1 books and 2 tapes. Their total price is 29.50. Call Book's de-constructor! Call Publication's de-constructor! Call Tape's de-constructor! Call Publication's de-constructor! Call Tape's de-constructor! Call Publication's de-constructor! Call Book's de-constructor! Call Publication's de-constructor! Call Tape's de-constructor! Call Publication's de-constructor! Call Tape's de-constructor! Call Publication's de-constructor! Call BookStore's de-constructor!
#include <iostream>
#include <cstdio>
#include <typeinfo>
#include <string>
#include <iomanip>
#include <vector>
using namespace std;
class Publication
{
public:
    double price;
    int length;
    virtual double getTotalPrice(){}
    Publication(double mon,int l):price(mon),length(l){cout<<"Call Publication's constructor!"<<endl;}
    double getPrice() const {return price;}
    int getLength(){return length;}
    virtual~Publication(){cout<<"Call Publication's de-constructor!"<<endl;}
};
class Book:public Publication
{
public:
    Book(double a,int b):Publication(a,b){cout<<"Call Book's constructor!"<<endl;}
    virtual~Book(){cout<<"Call Book's de-constructor!"<<endl;}
    virtual double getTotalPrice(){return price*length*1.0;}
};
class Tape:public Publication
{
public:
    Tape(double a,int b):Publication(a,b){cout<<"Call Tape's constructor!"<<endl;}
    virtual double getTotalPrice()
    {
        if(length%10==0)
            return price*1.0*(length/10);
        else
            return price*1.0*(length/10+1);
    }
    virtual~Tape(){cout<<"Call Tape's de-constructor!"<<endl;}
};

  

Problem D: 来开个书店吧的更多相关文章

  1. Problem A&B: 开宝箱 1/2 (最沙雕的做法)(未用指针做) 改:附上一种指针做法

    Description 急先锋是一个商人,有一天找到了一个宝箱,宝箱需要正确的密码才能打开.同时他发现宝箱上有一个数字,和一份密码表.密码表上有n个密码,只有一个密码是正确的. 急先锋所在的岛上有m个 ...

  2. Eclipse打开,出现Initializing Java Tooling “has encountered a problem错误,而且鼠标悬停在没有导包的类上面不会出现import信息。

    问题1:打开eclipse,出现了Initializing Java Tooling “has encountered a problem,点开详细信息,报的是空指针异常. 问题2:鼠标悬停在没有导包 ...

  3. 一个普通底层.NET程序员关于职场瓶颈期的思考,辗转自我提升/跳槽/转行之间

    徒有工龄,没技术没学历没平台没家底,工作几年,无车无房无存款还前景不明. 时常有身边的亲友问怎么学开发怎么转互联网,说起IT行业都说工资高,动辄月薪上万动辄年薪几十万. 再看看自己,我可能是假的程序员 ...

  4. 2017 SCNUCPC 解题报告

    校内赛题目.解题思路.参考代码一览 A. Blackstorm's Blackstore Problem Description Blackstorm is going to open a black ...

  5. 【NOI2013】小Q的修炼

    题目链接:http://uoj.ac/problem/123 又开提答坑啦,要不是一定要讲题谁他妈要这样伤害自己 CASE 1,2 首先可以打一个通用暴力,用于模拟操作过程,对于每一个操作随机一个选择 ...

  6. Problem B: 开个餐馆算算账

    Description 小明创业了!他开了一家餐馆,每天客人还挺多的.每天下班后,他都要算算今天总共收入多少钱,但是手工算太麻烦了,所以他来向你求助了. Input 第1行N>0,表示餐馆提供N ...

  7. 2019.03.09 bzoj4999: This Problem Is Too Simple!(树链剖分+线段树动态开点)

    传送门 题意:给一颗树,每个节点有个初始值,要求支持将i节点的值改为x或询问i节点到j节点的路径上有多少个值为x的节点. 思路: 考虑对每种颜色动态开点,然后用树剖+线段树维护就完了. 代码: #in ...

  8. BZOJ4999: This Problem Is Too Simple!树链剖分+动态开点线段树

    题目大意:将某个节点的颜色变为x,查询i,j路径上多少个颜色为x的点... 其实最开始一看就是主席树+树状数组+DFS序...但是过不去...MLE+TLE BY FCWWW 其实树剖裸的一批...只 ...

  9. BZOJ4999:This Problem Is Too Simple!(DFS序&树上差分&线段树动态开点:区间修改单点查询)

    Description 给您一颗树,每个节点有个初始值. 现在支持以下两种操作: 1. C i x(0<=x<2^31) 表示将i节点的值改为x. 2. Q i j x(0<=x&l ...

随机推荐

  1. Java并发/多线程系列——初识篇

    回到过去,电脑有一个CPU,一次只能执行一个程序.后来多任务处理意味着计算机可以同时执行多个程序(AKA任务或进程).这不是真的"同时".单个CPU在程序之间共享.操作系统将在运行 ...

  2. Crossin-8-1;8-2课程记录

    打开文件:    open,注意打开文件的路径    读取结束需使用close读取文件:    read    readlines    readline    for in 重置光标位置:   se ...

  3. Python自学笔记-生成器(来自廖雪峰的官网Python3)

    感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. 生成器 通过列 ...

  4. 使用Dapper操作Mysql数据库

    首先我想说明一下:相比最原始的ADO.NET,一般都认为封装过一层的ORM性能上会有损耗,但其实在使用中你会发现,当你需要把数据库对象转化为实体模型时,很多所谓的DbHelper其实封装的很低效,反而 ...

  5. webpack2使用ch6-babel使用 处理es6 优化编译速度

    1 目录结构 安装依赖 cnpm install --save-dev babel-loader babel-core babel-preset-env babel-preset-latest &qu ...

  6. ZOJ2212 Argus 优先队列 结构体

    #include <iostream> #include <string> #include <queue> using namespace std; struct ...

  7. java web Servlet 学习笔记 -3 会话管理技术

     Cookie和HttpSession 什么是会话: 用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 每个用户在使用浏览器与服务器进行会话的过 ...

  8. JavaWeb(七)之详解JavaWeb路径

    前言 在我们的实际开发中,经常要写路径,不管是链接,重定向还是转发,这都是需要路径的.那这一篇我给大家详细的分享一下Web中的各种路径问题. 世界上一切东西都是相对的,对于这点而言,相信大家并不陌生, ...

  9. Spring MVC Ajax 复杂参数的批量传递

    要解决的问题: 如何组织客户端参数? Ajax 方法的配置属性如何定义才能传递复杂参数? 基于 SpringMVC 的服务端该如何接收? MyBatis 怎么处理批量更新? 客户端脚本 viewMes ...

  10. MYSQL数据库45道练习题

    --第一题查询Student表中的所有记录的Sname.Ssex和Class列.select Sname,Ssex,Class from Student;--第二题查询教师所有的单位即不重复的Depa ...