Problem D: 来开个书店吧

某出版社可出版图书和磁带。其中图书按照每页的价格乘以页数进行定价,磁带根据每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;}
};

  

时间: 2024-10-29 05:54:13

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

FZU-1921 栀子花开(线段树)

Problem 1921 栀子花开 Accept: 323    Submit: 1156Time Limit: 1000 mSec    Memory Limit : 32768 KB Problem Description 这是一个栀子花开的季节,也是一个离别的季节,四年一千多个日日夜夜,那校园的角角落落,留下了我们沉思的身影:那上百次的成绩排名表,印证了我们深深浅浅不断进步的轨迹,但是这些进步都离不开老师的谆谆教诲. 作为计算机系的学生,算法与数据结构是必修的主干课程,因此课程的每个老师都

【NOI2013】小Q的修炼

题目链接:http://uoj.ac/problem/123 又开提答坑啦,要不是一定要讲题谁他妈要这样伤害自己 CASE 1,2 首先可以打一个通用暴力,用于模拟操作过程,对于每一个操作随机一个选择,然后跑多次记录答案. 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<vector> 5 #include<cstdlib> 6 #include&l

一场改变你投资生涯的讨论:职业德州扑克手看交易

各位投友大家好. 校长今天花时间仔细读了一篇长文,叫做<职业德州扑克手看交易:没犯任何错误照样输个精光>,非常棒的文章. 可惜不知道作者是谁,但看得出来,文中讲到的他自己在德州扑克上的经验是真实的. 这篇文章提出了两个非常有价值的概念. 第一个叫盈亏同源.有一些亏损是你在追求盈利道路上必须要支付的成本,这是不可避免也是不应该避免的.因为你一旦避免了这些亏损,你同时也就失去了盈利的机会. 而另外一些亏损择时可以避免也是应该避免的.所谓高手就是在这个部分发挥功力. 第二个概念是把风险分成了三层:系

作为一个SEO人员必须要具备的思维

试想百度是什么,百度是一个数据库,这个数据库就是提供给用户搜索需要的内容.不管是什么样的内容,如果我们满足了这一个需求百度就会将我们的网站排名到首页.具有不同的思维关系到你的SEO能走多远.案例:北京办公室装修公司. 一.哪些是百度的用户.作为一个平台,百度是不会关心你的站是卖产品还是提供信息咨询的.百度需要关心的是他的用户搜索什么词可以找到你,你的内容跟哪一些关键词有联系.如果在有联系的这些关键词里面用户找到了你并且你的内容提供非常ok,那么百度就会将你的网站排名靠前.相反如果用户搜索一个关键

逃离亦庄线

我被淹没在限流通道的人海里,感受着周遭的推攘和咒骂,在几乎窒息的空气中,我暗自思量:我何以落的这般田地? -1- 六月初,我和同事在饭馆吃饭,他突然对我说:“你听说了么,咱们公司马上就要解散了.” “不会吧.我们有支付牌照,有这东西在,公司再不济也能卖钱,怎么可能解散?” “即使不解散,也会有较大的人员变动.你看产品部门的需求调研都停了,HR最近也老往楼上跑.” “还真是,那我们得早做打算啊.” 他口中的消息其实我早有耳闻.这几天,裁员的消息在公司内不胫而走.一片风声鹤唳中,我却有些庆幸,甚至有

程序员越来越多,为啥工资反而越来越高?

据不完全统计中国的程序员已经超过200万,而且每年这个数字还在不停的上升,按道理从业人数逐渐增多工资应该越来越低,但是工资还是大幅度的在上涨,导致是什么原因导致? 如果用中国的行业薪资对标欧美国家的话,IT行业能算得上是唯一薪资接近的,且没有国有垄断的行业,而欧美国家IT行业发展历史很久,且还在不断增长,所以可以想象未来中国程序员的工资还会上涨,决定程序员持续上涨大致有以下几方面的原因. 十三五规划中,大方向是加快壮大战略性新兴产业,打造经济社会发展新引擎.在战略性新兴产业中,主要集中在信息技术

Problem P: 开个餐馆算算账

Problem P: 开个餐馆算算账 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1761  Solved: 931[Submit][Status][Web Board] Description 小明创业了!他开了一家餐馆,每天客人还挺多的.每天下班后,他都要算算今天总共收入多少钱,但是手工算太麻烦了,所以他来向你求助了. Input 第1行N>0,表示餐馆提供N个菜品. 之后N行,每行包括2部分:菜名(不含空白符)及每份菜品的价格. 接着是M>

Codeforces 803G Periodic RMQ Problem ST表+动态开节点线段树

思路: (我也不知道这是不是正解) ST表预处理出来原数列的两点之间的min 再搞一个动态开节点线段树 节点记录ans 和标记 lazy=-1 当前节点的ans可用  lazy=0 没被覆盖过 else 区间覆盖 push_up的时候要注意好多细节,, 数组尽量往大开 //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const in

【bzoj4999】This Problem Is Too Simple! 树链剖分+动态开点线段树

题目描述 给您一颗树,每个节点有个初始值. 现在支持以下两种操作: 1. C i x(0<=x<2^31) 表示将i节点的值改为x. 2. Q i j x(0<=x<2^31) 表示询问i节点到j节点的路径上有多少个值为x的节点. 输入 第一行有两个整数N,Q(1 ≤N≤ 100,000:1 ≤Q≤ 200,000),分别表示节点个数和操作个数. 下面一行N个整数,表示初始时每个节点的初始值. 接下来N-1行,每行两个整数x,y,表示x节点与y节点之间有边直接相连(描述一颗树).