美文网首页
C++boolan part3_week2

C++boolan part3_week2

作者: Bigyvan | 来源:发表于2017-12-03 21:33 被阅读0次

面向对象和泛型编程

面向对象是对data和operation的封装,是对同类事物的抽象,跟结构化编程相比它更接近自然语言。
泛型编程是对class和operation的抽象,对class的抽象可以说是对interface的抽象,而operation抽象则是对具有同一interface的class的operation的抽象。典型应用STL。
区别:
1)面向对象:封装(数据抽象)是基础,继承是手段,多态是目的;泛型编程:参数化类型(概念抽象)是基础,模板是手段,通用是目的。
2)面向对象是运行时问题空间的多态,泛型编程是编译时算法空间的多态(静态多态)。
3)泛型编程的过程就是一个不断将算法中的共性抽象提升(lift)出来的过程,最终的目的是形成一个最大程度上通用的算法或类。

特化和偏特化

模板有两种特化,全特化和偏特化(局部特化)
模板函数只能全特化,没有偏特化(以后可能有)。
模板类是可以全特化和偏特化的。
全特化,就是模板中模板参数全被指定为确定的类型。
全特化也就是定义了一个全新的类型,全特化的类中的函数可以与模板类不一样。
偏特化,就是模板中的模板参数没有被全部确定,需要编译器在编译时进行确定。

在类型上加上const、&、*( cosnt int、int&、int *、等等)并没有产生新的类型。只是类型被修饰了。模板在编译时,可以得到这些修饰信息。

一个特化的模板类的标志:在定义类实现时加上了<>,比如class A<int T>;而在定义一个模板类的时候,class A后面是没有<>的

全特化的标志:template <>然后是完全和模板类型没有一点关系的类实现或者函数定义

偏特化的标志:template <typename T.....>,就是说还剩下点东西,不像全特化<>整得那么彻底

iterator需要遵循的原则

std::rotate(__first,__middle,__last,std::iterator_category(__first))

在上例中,rotate()需要知道iterators的三个associated types。

iterators必须有能力回答algorithms的提问。这样的提问在C++标准库开发过程中设计了五种:category:种类;difference_type;距离;value_type:值类型;reference;pointer。

Iterator Traits用以分离class iterators和non—class iterators。

相关文章

  • C++boolan part3_week2

    面向对象和泛型编程 面向对象是对data和operation的封装,是对同类事物的抽象,跟结构化编程相比它更接近自...

  • C++boolan part1

    培养正规的、大气的编程习惯 1.Header(头文件)中的防卫声明 2.设置初值列,初始列 initializat...

  • C++boolan part2

    关于vptr/vtbl 1.只要类中存在虚函数(vptr),则一定有一根虚指针(就算有10000个虚函数也只存在一...

  • C++boolan part1_week3

    C++纯虚函数 一、定义 纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方...

  • C++boolan part1_week2

    Big Three三个特殊函数 (拷贝构造函数、拷贝赋值函数、析构函数) 1 拷贝构造函数 定义:如果一个构造函数...

  • C++boolan part3_week3

    由于对红黑树理解不深,课后对红黑树进行了较深入的探索。 此笔记主要对红黑树进行归纳理解,其中不免参照网上资料 红黑...

  • C++boolan part3_week1

    C++容器的介绍及使用 C++中的容器大致可以分为两个大类:顺序容器和关联容器。顺序容器中有包含有顺序容器适配器。...

  • C++boolan part3_week4

    1. 迭代器 1.1 迭代器的种类 使用随机访问迭代器的容器:array, vector,deque使用双向迭代器...

网友评论

      本文标题:C++boolan part3_week2

      本文链接:https://www.haomeiwen.com/subject/gxpzbxtx.html