跳转至

组合优先于继承

#include <cstdio>
#include <vector>

// 定义一个Order结构体,用于表示订单信息
// 每个订单包含一个整数类型的id和一个双精度浮点类型的price
struct Order {
  int id;
  double price;
};

// 定义一个继承自std::vector<Order>的类InheritanceOrderBook
// 这种设计方式采用了继承,使得InheritanceOrderBook类直接拥有std::vector<Order>的所有功能
// 可以像使用std::vector一样使用InheritanceOrderBook,例如调用其成员函数size()来获取元素数量
class InheritanceOrderBook : public std::vector<Order> {};

// 定义一个包含std::vector<Order>成员变量的类CompositionOrderBook
// 这种设计方式采用了组合,CompositionOrderBook类通过其成员变量orders_来使用std::vector<Order>的功能
// 这样做的好处是可以更灵活地控制对std::vector<Order>的使用,只暴露需要的接口给外部
class CompositionOrderBook {
  std::vector<Order>
      orders_;  // 定义一个std::vector<Order>类型的成员变量orders_,用于存储订单

 public:
  // 定义一个常量成员函数size(),用于返回orders_中元素的数量
  // noexcept表示该函数不会抛出异常,提高代码的安全性和性能
  auto size() const noexcept { return orders_.size(); }
};

int main() {
  InheritanceOrderBook i_book;
  CompositionOrderBook c_book;

  printf("InheritanceOrderBook::size():%lu CompositionOrderBook:%lu\n",
         i_book.size(), c_book.size());

  return 0;
}