c++primer第十六章模板和泛型编程小结-16
来源:互联网 发布:android数独游戏源码 编辑:程序博客网 时间:2024/06/11 12:51
第十六章---模板和泛型编程
1、泛型编程:以独立于任何特定类型的方式编写代码。使用泛型程序时,我们需要提供具体程序实例所操作的类型或值。标准库的容器、迭代器和算法都是泛型编程的例子。每种容器(如:vector)都有单一的定义,但可以支持定义许多不同种类的vector,他们的区别在于所包含的元素类型。模板是泛型编程的基础。
2、面向对象编程所依赖的多态性称为运行时多态性,泛型编程所依赖的多态性称为编译时多态性或参数式多态性。对于运行时多态性,只要使用基类的引用或指针,基类类型或派生类类型的对象就可以使用相同的代码。在泛型编程中,我们所编写的函数和类能够多态的用于跨越编译时不相关的类型。一个类和一个函数可以用来操纵多种类型的对象。
3、模板形参可以是表示类型的类型形参,也可以是表示常量表达式的非类型形参。与调用函数模板形成相比,使用类模板时,必须为模板形参显式指定实参。模板形参由关键字class或typename后接说明符构成,这两个关键字具有相同的含义。
4、函数模板是一个独立于类型的函数,可作为一种方式,产生特定的函数版本。
template <typename T>int compare(const T &v1, const T &v2){if(v1<v2) return -1;if(v2<v1) return 1;return 0;}模板定义以关键字template开始,后接模板形参表,模板形参表是用尖括号扩住的一个或多个模板形参的列表,形参之间以逗号隔。模板形参表不能为空。
5、类型形参的实参的受限转换:
const转换:接受const引用或const指针的函数可以分别用非const对象的引用或指针来调用。如果函数接受非引用类型,形参类型和实参都忽略const。数组或函数指针的转换:如果模板形参不是引用类型,则对数组或函数类型的实参应该用常规指针转换。当形参为引用时,数组不能转换为指针。
6、调用类模板成员函数比调用类似函数模板更灵活。当在类模板作用域外部定义成员模板的时候,必须包含两个模板形参表。模板特化:该定义中一个或多个模板形参的实际类型或实际值是指定的。对具有同一模板实参集的同一模板,程序不能既有显式特化又
有实例化。
模板特化:该定义中一个或多个模板形参的实际类型或实际值是指定的。
部分特化:类模板的一个版本,其中指定了某些但非全部的模板形参
对具有同一模板实参集的同一模板,程序不能既有显式特化又有实例化。
7、当在类模板作用域外部定义成员模板的时候,必须包含两个模板形参表。
8、命名空间
一个命名空间是一个作用域,通过在命名空间内部定义库中的名字可以避免全局名字的冲突。同一个命名空间可以不连续的分布在多个文件内,但未命名命名空间为每个文件独有,只能在文件内部不连续分布,不同的文件未命名空间代表不同的作用域。命名空间中的成员在程序运行的开始处即进行初始化,因此命名空间中的成员在程序中可以通过作用域限制直接使用,也可以通过using指示或using声明使用。using指示由于使整个命名空间中所有成员成为可见,大量使用时会重新引入命名冲突问题,成为命名空间污染。using指示将命名空间成员提升到外围作用域,当在类的成员函数中使用using指示时,命名空间的成员具有与类成员相同的作用域。如果在命名空间中使用模板特化,则模板的现实特化必须在定义通用模板的命名空间中声明。
9、多重继承:
多重继承时,如果同名函数在多个基类中出现将产生二义性。派生类中名字的查找首先发生在派生类内,如果在派生类内没有找到该函数,则在多个基类中同时查找(只检查函数名称),一旦找到多个函数具有相同名称,则该处产生二义性,如果只找到一个名称匹配的函数,则检查该函数调用是否合法(函数是否匹配)。
多重继承时,一个基类可能在派生层次中出现多次,此时派生类会拥有多个相同的基类,使用基类对象时会产生二义性。虚继承可以使多个相同基类在派生类中只被共享一次。在虚继承下,对给定虚基类,无论该类在派生层次中作为虚基类出现多少次,只继承一个共享的基类子对象。
- c++primer第十六章模板和泛型编程小结-16
- c++Primer,第十六章,模板和泛型编程
- 【c++primer】第十六章:模板与泛型编程
- C++ Primer 4 第十六章 模板和泛型编程
- 【C++ Primer】第十六章 模板和泛型编程
- c++ primer读书笔记--第十六章 模板和泛型编程
- 模板和泛型编程--模板定义--第十六章 --c++ primer
- 模板和泛型编程--模板编译模型--第十六章 --c++ primer(3)
- 《C++primer(第五版)》学习之路-第十六章:模板与泛型编程
- C++primer第五版笔记-第十六章模板与泛型编程
- C++ Primer复习和学习笔记 第十六章 模板与泛型编程
- 模板和泛型编程 --实例化-- C++ primer 第十六章(2)
- 第十六章 模板和泛型编程
- 【C++ Primer】【学习笔记】【第十六章】模板与泛型编程之一:模板定义
- C++Primer学习笔记第十六章(16/18)类 模型与泛型编程
- C++Primer学习笔记第十六章(16/18)类 模型与泛型编程
- 《C++ Primer》读书笔记——第十六章_模板与泛型编程
- 第十六章 模板与泛型编程
- AndroidStudio利用android-support-multidex解决65536问题64k问题
- c++笔记(3):函数内联、重载、宏定义、static和extern、存储区域
- C/C++ struct 结构体定义 用法详解
- Java中对象的初始化顺序
- 解决CAD宋体显示为问号的问题
- c++primer第十六章模板和泛型编程小结-16
- android 开发工具
- 威佐夫博弈(附POJ1067)
- MySQL性能优化的最佳20+条经验
- Hbase集群搭建
- 小程序开发者工具下载及调试指南
- 数据挖掘学习-准备篇-python基础
- 输入输出流-Writer
- 【Java多线程与并发库】17.java5同步集合类的应用