C++模板和群体数据
1、所谓参数多态性,就是将程序所处理的对象的类型参数化,使得一段程序可以用于处理多种不同类型的对象。
2、函数模板

①模板参数表由用逗号分隔的模板参数构成,可以包括以下内容:
- class(或typename)标识符,指明可以接受一个类型参数。这些类型参数代表的是类型,可以预定义类型或自定义类型
 - 类型说明符 标识符,指明可以接受一个由“类型说明符”所规定的变量作为参数
 - template<参数表>class标识符,指明可以接收一个类模板名作为参数。
 
【注】类型参数可以用来指定函数模板本身的形参类型、返回值类型,以及声明函数中的局部变量。函数模板中函数体的定义方式与定义普通函数类似。
②当类型参数的含义确定后,编译器将以函数模板为样板,生成一个函数,这一过程称为函数模板的实例化。
③函数模板与函数的区别:
- 函数模板本身在编译时不会生成任何目标代码,只有由模板生成的实例才会生成目标代码。
 - 被多个源文件引用的函数模板,应当连同函数体一同放在头文件中,而不能像普通函数那样只将声明放在头文件中。
 - 函数指针也只能指向函数的实例,而不能指向模板本身。
 
3、类模板
①使用类模板使用户可以为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数、返回值或局部变量能取不同类型(包括系统预定义和用户自定义的)
②类是对一组对象的公共性质的抽象,而类模板则是对不同类的公共性质的抽象,因此类模板是属于更高层次的抽象。由于类模板需要一种或多种类型参数,所以类模板也常常称为参数化类。

【注1】类成员声明的方法与普通类的定义几乎相同,只是它的各个成员(数据成员和函数成员)中通常要用到模板的类型参数T。

【注2】一个类模板声明自身并不是一个类,只有当被其他代码引用时,模板才根据引用的需要生成具体的类

③通过把参数绑定到形式参数可以创建具体的类,这称为类模板的实例化
④模板参数表中的类型参数同样可以声明为该模板类的友元类

⑤通过typedef和using可以为类型设定别名。

【注】当需要为模板而非模板实例化后的类定义别名时,只能通过C++11标准下的using关键字来实现

4、①C++中,如果想将自定义类型T的对象隐含或显式地转换为S类型,可以将operator S定义为T的成员函数。
②当对象本身为常对象时,为了避免通过指针对数组内容进行修改,只能将对象转换为常指针。
                    
                
                
            
        
浙公网安备 33010602011771号