Chapter9类属机制-模板.ppt
文本预览下载声明
主要内容 类属(泛型)的基本概念 函数模板 类模板 模板的复用 C++标准模板库简介 类属基本概念 在程序设计中,经常需要用到一些功能完全相同的程序实体,但它们所涉及的数据类型不同。例如,对不同元素类型的数组进行排序的函数: void int_sort( int x[] , int num); void double_sort( double x[] , int num); void A_sort( A x[] , int num); 这三个函数的实现基本是一样的。 类属基本概念 class IntStack{ int buf[100]; public: bool push(int); bool pop(int); }; 类 属 直接将数据类型作为参数,这种机制称为类属(genericity)。 具有类属性质的程序实体有类属函数以及类属类。 在C++中,可以采用模板(template)机制实现类属,分别称为函数模板和类模板。 类属函数 函数模板是指带有类型参数的函数定义,其格式如下: template class T1, class T2, ... 返回值类型 函数名(参数表){函数体} T1、T2等是函数模板的类型参数 返回值类型 、参数表中的参数类型以及函数体中的局部变量的类型可以是T1、T2等。 类属函数 使用函数模板时,首先必须要对函数模板进行实例化(生成具体的函数)。 函数模板的实例化通常是隐式的,由编译程序根据实参的类型自动地把函数模板实例化为具体的函数。 有需要时,也可在程序中显式地实例化函数模板。 匹配规则 如果某一函数的参数类型正好与函数调用的实际参数类型匹配,则调用该函数。 如果能从同名的类属函数实例化一个函数实例,而该函数的参数类型正好与函数调用的实际参数类型匹配,则调用该实例化的函数,否则: 对函数调用的实际参数作隐式类型转换后与非类属函数再作匹配,找到匹配的函数则调用它,否则提示语法错误 思 考 将本章开始时的sort排序函数写成模板,并调用验证。 类属类 由C++语言的模板定义的类称为类属类 template class T1,class T2,... class 类名 {类成员说明} T1、T2等为类模板的类型参数,在类成员的说明中可以使用T1、T2等作为它们的类型。 类属类 类属类必须显式实例化之后才可以被用来创建对象:用某一数据类型替代类属类的类型参数。 在类属类定义之外使用类属类的名字时,必须给出类属参数。 思 考 将本章开始时的Stack类写成模板,并调用验证。 STL STL:标准模板库,包含了一些常用算法模板(如排序查找函数模板)和容器类模板(如集合类模板,栈类模板)。 容器用于存储数据元素。算法用于对容器进行操作。每个容器类都有若干个与之对应的迭代器类,通过迭代器来遍历和访问容器内的元素。 Chapter 9 类属机制-模板 可否用一个函数来解决? class DoubleStack{ double buf[100]; public: bool push(double); bool pop(double); }; class AStack { A buf[100]; public: bool push(A); bool pop(A); }; 三个类的实现基本一样 可否用一个类来解决?
显示全部