OOP vs GP

2018-07-02  本文已影响11人  编程半岛

1. OOP(Object-Oriented programming)

在OOP中,企图将datas和methods关联在一起,如下面的stl_list.h部分代码所示:

template<class T, class Alloc = alloc>
class list{
...
  protected:
      link_type node;          // datas部分
...
  public:
      void sort();            // methods部分
};

为什么list不能使用::sort()排序?
全局的sort()中需要容器有随机存取的性质,而list中没有这种性质,因此需要使用自己的sort()

在标准库中,容器自己有sort()就需要用自己的sort(),而不用全局的sort().

2. GP(Generic Programming)

在GP中,将datas和methods分开。如下代码所示:
stl_vector.h

template <class T, class Alloc = alloc>
class vector {
...
}

stl_deque.h

template <class T, class Alloc = alloc, size_t BufSiz = 0> 
class deque {
...
}

stl_vector.hstl_deque.h中找不到sort()函数,当需要将容器vector和deque这两个容器进行排序时,需要调用algorithms中的sort()函数。

template <class RandomAccessIterator>
inline void sort(RandomAccessIterator first, RandomAccessIterator last) {
...
}

template <class RandomAccessIterator, class Compare>
inline void sort(RandomAccessIterator first, RandomAccessIterator last,
                 Compare comp) {
...
}

采用GP的好处:

所谓的algorithms,其内最终涉及元素本身的操作无非就是比大小,不同比较大小的规则,调用的函数不一样,输出结果也不一样。

上一篇下一篇

猜你喜欢

热点阅读