15.4. Abstract Base Classes
来源:互联网 发布:linux强制删除用户 编辑:程序博客网 时间:2024/06/08 13:49
//Exercises Section 15.4//Exercise 15.15: Define your own versions of Disc_quote and//Bulk_quote.//Exercise 15.16: Rewrite the class representing a limited discount strategy,//which you wrote for the exercises in § 15.2.2 (p. 601), to inherit from//Disc_quote.class Quote {public: Quote() = default; Quote(const string &book, double sales_price): bookNo(book), price(sales_price) { } string isbn() const { return bookNo; } virtual double net_price(size_t n) const { return n * price; } virtual ~Quote() = default;private: string bookNo;protected: double price = 0.0;};class Disc_quote : public Quote {public: Disc_quote() = default; Disc_quote(const string &b, double p, size_t qty, double disc) : Quote(b, p), quantity(qty), discount(disc) { } virtual double net_price(size_t n) const = 0;protected: size_t quantity = 0; double discount = 0.0;};class Bulk_quote : public Disc_quote {public: Bulk_quote() = default; Bulk_quote(const string &book, double p, size_t qty, double dis) : Disc_quote(book, p, qty, dis) { } double net_price(size_t cnt) const override { if(cnt >= quantity) return cnt * (1 - discount) * price; else return cnt * price; }};class Limited_quote : public Disc_quote {public: Limited_quote() = default; Limited_quote(const string &book, double p, size_t qty, double dis): Disc_quote(book, p, qty, dis) { } double net_price(size_t n) const override { if(n <= quantity) return n*(1-discount) * price; else return n * 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() { //Disc_quote dq; Quote q("12-34-45678", 10); Bulk_quote bq("12-34-45678", 10, 10, 0.2); Limited_quote lq("12-34-45678", 10, 10, 0.2); print_total(cout, q, 10); print_total(cout, bq, 10); print_total(cout, lq, 10); return 0;}//Exercise 15.17: Try to define an object of type Disc_quote and see what//errors you get from the compiler.//error: cannot declare variable 'dq' to be of abstract type 'Disc_quote'
阅读全文
0 0
- 15.4. Abstract Base Classes
- Python - abc (Abstract Base Classes)
- Some tips about Abstract base classes and pure virtual functions
- virtual base classes
- All about abstract classes
- Interfaces vs Abstract Classes...
- All about abstract classes.
- Abstract Classes Vs Interfaces
- Abstract Classes (C++)
- All about abstract classes
- C# - Abstract Classes
- Java Abstract Classes
- websphere mq java base classes
- Defining Base and Derived Classes
- Java-Abstract classes and methods
- [Java] Abstract classes vs. interfaces
- About Abstract Methods and Classes
- 小结Basic GNUstep Base Library Classes 例子
- leetcode Reverse Integer & Palindrome Number
- c++调用lua文件
- angular2 集成 Editor.md
- bind
- 性能测试常见指标
- 15.4. Abstract Base Classes
- 常用正则帮助类
- Get&Post请求
- Android抽屉式导航栏drawerlayout与toolbar的共同使用
- JS双色球大乐透随机号码方法
- 基于apache httpclient实现四种常用method
- mac 当前位置打开终端
- java类和对象的理解
- windows下android studio导入下载好的gradle-3.3-all.zip