面向对象编程和`GP`泛型编程
c++
标准库
标准库并不是用面向对象的概念设计出来的
面向对象的概念关键点:
-
class
与class
的继承关系 -
虚函数 -> 抽象
class
或者接口
面向对象库复杂的点在于继承关系很复杂
OOP(Object-Oriented programming)
关键概念:
-
class
的数据放在类里面 -
操作数据的函数也放在类里面
GP(Generic Programming)
泛型编程的关键概念:
-
将数据和操作数据的方法分开来
示例代码:
template<typename T, class Alloc = T>
class vector
{
};
template<typename _RandomAccessIterator>
inline void sort(_RandomAccessIterator _first, _RandomAccessIterator _last) {
}
分析:
-
sort
方法并没有声明在vector
类当中 -
调用
sort
方法取到vector
的数据通过iterator
迭代器 -
sort
算法通过iterator
迭代器确定操作范围,通过iterator
取用container
的元素
关键字inline
作用:
-
将方法声明成
inline
那么在调用到该方法的地方会直接将方法体的内容写到调用处 -
不需要去
call
存储方法的内存地址在进入方法进行调用
没有inline
-
函数调用模型就是在方法调用处找到函数地址然后再调用函数,调用完成回到方法执行处继续往下执行
GP
编程当中一个形象的例子:
-
由于数据和处理数据的算法分开.通过迭代器去联系在一起
-
那么例如比较大小的行为,就需要数据去定义如何比较
例如比较两个类的大小:
示例代码:
可以看到具体的比较大小的行为:
-
有一套默认的方法去比较
-
It's a lonely road!!!