Advertisement
Guest User

Untitled

a guest
Sep 18th, 2015
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.20 KB | None | 0 0
  1. #include <iostream>
  2. #include <typeinfo>
  3.  
  4. using namespace std;
  5.  
  6. class Quote {
  7. public:
  8.     Quote() = default;
  9.     Quote(const string& book, double sales_price): bookNo(book), price(sales_price) { }
  10.     string isbn() const { return bookNo; }
  11.     Quote(const Quote&);
  12.     Quote(Quote&&) noexcept;
  13.     Quote& operator=(const Quote&);
  14.     Quote& operator=(Quote&&) noexcept;
  15.     virtual ~Quote() = default;
  16.     virtual double net_price(size_t n) const    {return n * price; }
  17. private:
  18.     string bookNo;
  19. protected:
  20.     double price = 0.0;
  21. };
  22. Quote::Quote(const Quote& q) : bookNo(q.bookNo), price(q.price)
  23. {
  24.     cout    << "Class: "    << (typeid(*this).name())   << ", Copy constructor" << endl;
  25. }
  26. Quote::Quote(Quote&& q) noexcept : bookNo(q.bookNo), price(q.price)
  27. {
  28.     cout    << "Class: "    << (typeid(*this).name())   << ", Move constructor" << endl;
  29. }
  30. Quote& Quote::operator=(const Quote& q)
  31. {
  32.     bookNo=q.bookNo;    price=q.price;
  33.     cout    << "Class: "    << (typeid(*this).name())   << ", Copy assigment"   << endl;
  34.     return *this;
  35. }
  36. Quote& Quote::operator=(Quote&& q) noexcept
  37. {
  38.     if(this != &q)
  39.     {
  40.         bookNo=q.bookNo;    price=q.price;
  41.         cout    << "Class: "    << (typeid(*this).name())   << ", Move assigment"   << endl;
  42.     }
  43.     return *this;
  44. }
  45.  
  46. class Bulk_quote : public Quote {
  47. public:
  48.     Bulk_quote() = default;
  49.     Bulk_quote(const string& book, double p, size_t qty, double disc):
  50.         Quote(book, p), min_qty(qty), discount(disc) { }
  51.     Bulk_quote(const Bulk_quote&);
  52.     Bulk_quote(Bulk_quote&&) noexcept;
  53.     Bulk_quote& operator=(const Bulk_quote&);
  54.     Bulk_quote& operator=(Bulk_quote&&) noexcept;
  55.     double net_price(size_t) const override;
  56. private:
  57.     size_t min_qty = 0;
  58.     double discount = 0.0;
  59. };
  60. Bulk_quote::Bulk_quote(const Bulk_quote& q) : Quote(q), min_qty(q.min_qty), discount(q.discount)
  61. {
  62.     cout    << "Class: "    << (typeid(*this).name())   << ", Copy constructor" << endl;
  63. }
  64. Bulk_quote::Bulk_quote(Bulk_quote&& q) noexcept : Quote(q), min_qty(q.min_qty), discount(q.discount)
  65. {
  66.     cout    << "Class: "    << (typeid(*this).name())   << ", Move constructor" << endl;
  67. }
  68. Bulk_quote& Bulk_quote::operator=(const Bulk_quote& q)
  69. {
  70.     Quote::operator=(q);
  71.     min_qty=q.min_qty;  discount=q.discount;
  72.     cout    << "Class: "    << (typeid(*this).name())   << ", Copy assigment"   << endl;
  73.     return *this;
  74. }
  75. // Move assignment
  76. Bulk_quote& Bulk_quote::operator=(Bulk_quote&& q) noexcept
  77. {
  78.     if(this != &q)
  79.     {
  80.         *this=Quote::operator=(q);
  81.         min_qty=q.min_qty;  discount=q.discount;
  82.         cout    << "Class: "    << (typeid(*this).name())   << ", Move assigment"   << endl;
  83.     }
  84.     return *this;
  85. }
  86.  
  87. double Bulk_quote::net_price(size_t cnt) const
  88. {
  89.     if (cnt >= min_qty)
  90.         return cnt * (1 - discount) * price;
  91.     else
  92.         return cnt * price;
  93. }
  94.  
  95.  
  96. double print_total(ostream& os, const Quote& item, size_t n)
  97. {
  98.     double ret = item.net_price(n);
  99.     os  << "ISBN: " << item.isbn()
  100.         << " # sold: "  << n    << " total due: "   << ret  << endl;
  101.     return ret;
  102. }
  103.  
  104.  
  105.  
  106. int main()
  107. {
  108.     Quote book0("0-201-82470-1", 45.39), book1("0-201-70353-X", 24.99);
  109.     Bulk_quote bbook0("0-201-82470-1", 45.39, 5, .30), bbook1("0-201-70353-X", 24.99, 4, .30);
  110.  
  111.     Quote q0(book0), q1(std::move(book0));
  112.     q1=book1;
  113.     q0=std::move(book1);
  114.  
  115.  
  116.     Bulk_quote bq0(bbook0), bq1(std::move(bbook0));
  117.     bq1=bbook1;
  118.     bq0=std::move(bbook1);
  119.    
  120.     return EXIT_SUCCESS;
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement