美文网首页
C++语言复习1

C++语言复习1

作者: Cipolee | 来源:发表于2019-06-12 17:00 被阅读0次

DATA :2019/6/12

see problem
oo

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

  1. Book类是Publication的子类。

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

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

3)析构函数。

  1. 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中给出。

-输入- -输出-
3
B 0.10 201
T 0.50 100
T 0.40 105
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!

The answer as the follow

#include<iostream>
#include<typeinfo>
#include<iomanip>
using namespace std;
class Publication
{
public:
    double price;
    int length;
    virtual double getTotalPrice()=0;
    Publication(double _price=0,double _length=0):price(_price),length(_length)
    {
        cout<<"Call Publication's constructor!"<<endl;
    }
    double getPrice()
    {
        return price;
    }
    int getLength()
    {
        return length;
    }
    virtual ~Publication(){cout<<"Call Publication's de-constructor!"<<endl;}
};
class Book:public Publication
{
public:
    Book(double _price,int _length):Publication(_price,_length)
    {
        cout<<"Call Book's constructor!"<<endl;
    }
    double getTotalPrice()
    {
        return price*length;
    }
    virtual ~Book()
    {
        cout<<"Call Book's de-constructor!"<<endl;
    }
};
class Tape:public Publication
{
public:
    Tape(double _price,int _length):Publication(_price,_length)
    {
        cout<<"Call Tape's constructor!"<<endl;
    }
    double getTotalPrice()
    {
        return length/10*price;
    }
    virtual ~Tape()
    {
        cout<<"Call Tape's de-constructor!"<<endl;
    }
};
class BookStore
{
private:
    Publication **pubs;
    int num;
public:
    BookStore(Publication **p, int n)
    {
        pubs = new Publication*[n];
        num = n;
        for (int i = 0; i < n; i++)
        {
            if (typeid(*(p[i])) == typeid(Book))
            {
                pubs[i] = new Book(p[i]->getPrice(), p[i]->getLength());
            }
            else
            {
                pubs[i] = new Tape(p[i]->getPrice(), p[i]->getLength());
            }
        }
    }
    int getNumOfBook()
    {
        int c = 0;
        for (int i = 0; i < num; i++)
        {
            if (typeid(*(pubs[i])) == typeid(Book))
                c++;
        }
        return c;
    }
    int getNumOfTape()
    {
        int c = 0;
        for (int i = 0; i < num; i++)
        {
            if (typeid(*(pubs[i])) == typeid(Tape))
                c++;
        }
        return c;
    }
    ~BookStore()
    {
        for (int i = 0; i < num; i++)
        {
            delete pubs[i];
        }
        delete[] pubs;
        cout<<"Call BookStore's de-constructor!\n";
    }
};
int main()
{
    int cases, date;
    char type;
    double total,price;
    Publication **pub;
    cin>>cases;
    pub = new Publication*[cases];
    for (int i = 0; i < cases; i++)
    {
        cin>>type>>price>>date;
        switch(type)
        {
        case 'B':
            pub[i] = new Book(price,date);
            break;
        case 'T':
            pub[i] = new Tape(price,date);
            break;
        }
    }
    BookStore bookStore(pub, cases);
    cout<<"There are "<<bookStore.getNumOfBook()<<" books and "<<bookStore.getNumOfTape()<<" tapes.";
    total = 0;
    for (int i = 0; i < cases; i++)
    {
        total += pub[i] -> getTotalPrice();
    }
    cout<<" Their total price is "<<setprecision(2)<<fixed<<total<<"."<<endl;
    for (int i = 0; i < cases; i++)
    {
        delete pub[i];
    }
    delete[] pub;
    return 0;
}
  Attention:
 构造函数的析构最好使用虚函数,以防有内存碎片泄漏。

相关文章

  • C++语言复习1

    DATA :2019/6/12 see problemoo 某出版社可出版图书和磁带。其中图书按照每页的价格乘以页...

  • C++语言复习2

    DATA 2019/6/12 封装一个分数类Fract,用来处理分数功能和运算,支持以下操作: 构造:传入两个参数...

  • C++语言学习之面向对象

    1.C语言与C++语言的区别 C++面向对象 C 面向过程 函数+结构体 C++可以运行调用C语言 反之 C语言无...

  • C++复习1

    ^异或:相同为假,不同为真。00000000 00000000 00000000 01000110^0000000...

  • 音视频学习之路--C++

    前言 C和C++作为学习音视频技术首要具备的语言基础,所以十分必要学习和复习一下之前学习C++语言基础。 这里ID...

  • C++简答题

    一、简答题 1、C语言与C++语言的区别? 答: C语言是面向过程语言,C++是面向对象语言(OOP) C语言...

  • C++课程内容与考核要求

    第一章 C++语言简介 一、课程内容 1. C++语言的发展简史 1.1 了解C++语言的发展历史,达到“识记”。...

  • C++基础(二)

    由于感觉自己对C++语言的知识点遗忘了好多,于是近期复习C++语言基础知识,重新学习一遍感觉又有好多新的收获。在复...

  • C++? VS2017?

    一、C++ 1.什么是C++语言? C++是对C语言的优化,采用面向对象的编程思想。是一种静态的编译型语言,即...

  • 算法面试题小收录

    1的个数 时间限制:C/C++语言 2000MS;其他语言 4000MS内存限制:C/C++语言 65536KB;...

网友评论

      本文标题:C++语言复习1

      本文链接:https://www.haomeiwen.com/subject/whalfctx.html