Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <typeinfo>
- using namespace std;
- class Quote {
- public:
- Quote() = default;
- Quote(const string& book, double sales_price): bookNo(book), price(sales_price) { }
- string isbn() const { return bookNo; }
- Quote(const Quote&);
- Quote(Quote&&) noexcept;
- Quote& operator=(const Quote&);
- Quote& operator=(Quote&&) noexcept;
- virtual ~Quote() = default;
- virtual double net_price(size_t n) const {return n * price; }
- private:
- string bookNo;
- protected:
- double price = 0.0;
- };
- Quote::Quote(const Quote& q) : bookNo(q.bookNo), price(q.price)
- {
- cout << "Class: " << (typeid(*this).name()) << ", Copy constructor" << endl;
- }
- Quote::Quote(Quote&& q) noexcept : bookNo(q.bookNo), price(q.price)
- {
- cout << "Class: " << (typeid(*this).name()) << ", Move constructor" << endl;
- }
- Quote& Quote::operator=(const Quote& q)
- {
- bookNo=q.bookNo; price=q.price;
- cout << "Class: " << (typeid(*this).name()) << ", Copy assigment" << endl;
- return *this;
- }
- Quote& Quote::operator=(Quote&& q) noexcept
- {
- if(this != &q)
- {
- bookNo=q.bookNo; price=q.price;
- cout << "Class: " << (typeid(*this).name()) << ", Move assigment" << endl;
- }
- return *this;
- }
- class Bulk_quote : public Quote {
- public:
- Bulk_quote() = default;
- Bulk_quote(const string& book, double p, size_t qty, double disc):
- Quote(book, p), min_qty(qty), discount(disc) { }
- Bulk_quote(const Bulk_quote&);
- Bulk_quote(Bulk_quote&&) noexcept;
- Bulk_quote& operator=(const Bulk_quote&);
- Bulk_quote& operator=(Bulk_quote&&) noexcept;
- double net_price(size_t) const override;
- private:
- size_t min_qty = 0;
- double discount = 0.0;
- };
- Bulk_quote::Bulk_quote(const Bulk_quote& q) : Quote(q), min_qty(q.min_qty), discount(q.discount)
- {
- cout << "Class: " << (typeid(*this).name()) << ", Copy constructor" << endl;
- }
- Bulk_quote::Bulk_quote(Bulk_quote&& q) noexcept : Quote(q), min_qty(q.min_qty), discount(q.discount)
- {
- cout << "Class: " << (typeid(*this).name()) << ", Move constructor" << endl;
- }
- Bulk_quote& Bulk_quote::operator=(const Bulk_quote& q)
- {
- Quote::operator=(q);
- min_qty=q.min_qty; discount=q.discount;
- cout << "Class: " << (typeid(*this).name()) << ", Copy assigment" << endl;
- return *this;
- }
- // Move assignment
- Bulk_quote& Bulk_quote::operator=(Bulk_quote&& q) noexcept
- {
- if(this != &q)
- {
- *this=Quote::operator=(q);
- min_qty=q.min_qty; discount=q.discount;
- cout << "Class: " << (typeid(*this).name()) << ", Move assigment" << endl;
- }
- return *this;
- }
- double Bulk_quote::net_price(size_t cnt) const
- {
- if (cnt >= min_qty)
- return cnt * (1 - discount) * price;
- else
- return cnt * 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 book0("0-201-82470-1", 45.39), book1("0-201-70353-X", 24.99);
- Bulk_quote bbook0("0-201-82470-1", 45.39, 5, .30), bbook1("0-201-70353-X", 24.99, 4, .30);
- Quote q0(book0), q1(std::move(book0));
- q1=book1;
- q0=std::move(book1);
- Bulk_quote bq0(bbook0), bq1(std::move(bbook0));
- bq1=bbook1;
- bq0=std::move(bbook1);
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement