c++ primer 5th

第15章 面向对象的程序设计

2017-07-07  本文已影响0人  菜鸡也会飞

一、OOP:概述

  1. 面向对象程序设计的核心思想是数据抽象、继承和动态绑定
  1. 通过继承联系在一起的类构成一种层次关系。
  1. 类派生列表
  1. 动态绑定
double print_total(const Quote &item, size_t n) {
  double ret = item.net_price(n);
}
  1. eg:
class Quote {
  public:
    std::string isbn() const;
    virtual double net_price(std::size_t n)  const ;
};
class Bulk_Quote:public Quote{
  public:
    double net_price(std::size_t n) const override;
};

二、定义基类和派生类

  1. 定义基类
class Quote {
  public:
    Quote() = default;
    Quote(const std::string& book, double sales_price):
               bookNo(book),price(sales_price) {}
    std::sting isbn() {return bookNo;}
    // 返回给定数量的书籍的销售总额
    // 派生类负责改写并使用不同的折扣计算方法
    virtual double net_price(std::size_t n) const {return n*price;}
    virtual ~Quote() = default;
  private:
    std::string bookNo; 
  protected:
    double price = 0.0;
};

说明:

  1. 定义派生类

三、虚函数

四、抽象基类

  1. 设计动机
    如果希望书店程序能够支持多种折扣方式策略,可以定义一个新的Disc_Quote类来支持不同的折扣策略。该类表示的是一本打折书籍的通用概念,而非某种具体的折扣策略,因此在其中定义net_price()函数是无意义的,但是如果不定义net_price()函数,其派生类会调用Quote的price函数
  2. 纯虚函数
double net_price(std::size_t) const = 0;
  1. 抽象基类
  1. eg
class Disc_Quote: public Quote {
  public:
    Disc_Quote() = default;
    Disc_Quote(const std::string& book, double price, std::size_t qty, double disc):
                Quote(book,price),quantity(qty),discount(disc) {}
    double net_price(std::size_t) const = 0;
  protected:
    std::size_t quantity = 0;
    double discount = 0.0;
};
class Bulk_Quote:public Disc_Quote{
  public:
    Bulk_Quote() = default;
    Bulk_Quote(const std::string& book, double price, std::size_t qty, double disc):
      Disc_Quote(book,price,qty,disc) {}
    double net_price(std::size_t) const override;
};

说明:

  1. 重构

五、访问控制和继承

上一篇 下一篇

猜你喜欢

热点阅读