编程范式游记
- 类型带来的问题:同一事物的不同类型导致处理时复杂度的提高,因此需要抽象与隔离
- C语言存在的问题:
- 一个通用的算法需要适配处理的数据类型,但C语言在适配过程中只能使用
void
或者 宏替换
的方式,这两种方式导致类型过于宽松,带来其他问题 - 适配数据类型时需要传入额外参数,以为无法识别被泛型后的数据类型
- 算法实际上是对数据结构的操作,而数据存放在数据结构中,因此真正的泛型除了适配数据类型,还需要适配数据结构,会导致泛型算法复杂度急剧上升(容器内存的分配与释放、不同数据体的内存分配和是泛模型、对象之间的复制等)
- 实现泛型算法时的权衡,什么该封装,什么该抛给调用者处理
- C语言的编程范式决定了他是一门过程式的编程语言,底层灵活且高效,适用于开发运行较快且对系统资源利用率要求较高的程序
C++
早期的许多工作是对 C
的加强和净化,并把完全兼容 C
作为强制性要求 - 用引用解决指针的问题
- 用
namespace
解决名字空间冲突的问题 - 通过
try-catch
解决检查返回值编程的问题 - 用
class
解决对象的创建、复制、销毁的问题,从而解决在结构体嵌套时深度复制的内存安全问题 - 通过重载操作符达到操作上的泛型
- 通过模板
template
和虚函数的多态以及运行时识别来达到更高层次的泛型和多态 - 用
RALL
、智能指针的方式,解决C语言中因为需要释放资源而出现的丑陋、易出错的代码问题 - 用
STL
解决C语言中算法和数据结构的一些坑
- 良好的泛型需要解决的问题:
- 算法的泛型
- 类型的泛型
- 数据结构(数据容器)的泛型