20.2为什么要用模板2、关于类再考察一个链表类class CatListclass CatCat类对象作({为链表结点。private:/类声明;Cat * first ;public:CatList() ;void Remove(Cat &);void Add(Cat &) ;Cat * Find( Cat &);~CatList() ;1;如果想处理其他类类型的对象作为结点的链表,注洋就必须重新对CatList类进行定义
2、关于类 再考察一个链表类。 class Cat { //类声明 } ; class CatList { private: Cat * first ; public: CatList( ) ; void Remove( Cat & ) ; void Add( Cat & ) ; Cat * Find( Cat & ); ~CatList( ) ; } ; Cat类 对 象 作 为链表结点。 如果想处理其他类类型的对象作为结点的链表, 就必须重新对CatList类进行定义。 注
20.3函数模板函数模板用来定义通用的函数,其作用类似函数重载。函数模板的优点是:编码比函数重载简单函数模板的一般定义形式是:template<类型形式参数表>函数定义函数模板为通用函数,其形参类型不具体指定,注用虚拟的类型来代表
• 函数模板用来定义通用的函数,其作用类似 函数重载。 • 函数模板的优点是:编码比函数重载简单。 • 函数模板的一般定义形式是: template <类型形式参数表> 函数定义 函数模板为通用函数,其形参类型不具体指定, 用虚拟的类型来代表。 注
20.3函数模板·其中的类型形式参数表可以包含基本数据类型,也可以包含类类型如果是类类型,则须加前缀class类型形式参数表中的模板参数形式为:class <类型参数>或 typename <类型参数>关键字class与一般所讲的类无关,而是与“类注型参数”一起说明这是一个内部类型或用户自己定义的数据类型
• 其中的类型形式参数表可以包含基本数据类 型,也可以包含类类型。 • 如果是类类型,则须加前缀class。 • 类型形式参数表中的模板参数形式为: class <类型参数> 或 typename <类型参数> 关键字class与一般所讲的类无关,而是与“类 型参数”一起说明这是一个内部类型或用户自己 定义的数据类型。 注
20.3函数模板,这样的函数模板定义,不是一个实实在在的函数。编译系统不为其产生任何执行代码该定义只是对函数的描述表示它每次都能单独处理在类型形式参数表中说明的数据类型
• 这样的函数模板定义,不是一个实实在在的 函数。 • 编译系统不为其产生任何执行代码。 • 该定义只是对函数的描述。 • 表示它每次都能单独处理在类型形式参数表 中说明的数据类型
20.3函数模板,在使用模板函数时,模板中的类型参数可以用一个实际类型替换,从而达到了类型通用的目的。当类型参数的含义确定后,编译器将以函数模板为样板,生成一个具体的函数当编译系统发现有一个函数调用:函数名(实在参数表)
• 在使用模板函数时,模板中的类型参数可以 用一个实际类型替换,从而达到了类型通用 的目的。 • 当类型参数的含义确定后,编译器将以函数 模板为样板,生成一个具体的函数。 • 当编译系统发现有一个函数调用: 函数名(实在参数表)