C++模板基本概念及语法

C++ 提供了多种代码重用机制,在前面介绍派生和继承时,派生类可以继承基类中的成员变量和成员函数。模板是另一种代码重用机制。

有时候在设计程序的时候会遇到这样一种情况:需要设计的几个类,其功能都是一样的,仅仅只是需要操作的数据类型不同。例如我们需要创建一个数组类,该数组可能是 int 整型数组,也可能是 double 类型数组、string 类型数组等。解决类似的问题,固然可以将所有的类都设计一遍,但是在 C++ 中,我们有更好的方法,就是设计一个模板类。

在本例中,我们定义了一个表示数组的模板类 array,借用该示例,我们来了解一下模板类的一些基本语法。定义模板类 array 时,前面加上了一句声明

template<class T>

该语句称为模板头,可以单独放在一行,也可以与后面的class array放在同一行,这都没有关系。模板头中的“T”称为类参数,类参数表示将会以确定的数据类型替代之,任何有效的 C++ 标识符均可以作为类参数,当然通常我们还是会用“T”来做类参数。
模板头中,template 关键字和“<”之间可以保留一个空格,但通常这两者之间不留空格。

对于模板类而言,在类外定义类中的成员函数的时候都需要加上模板头。同时由于 array 是个模板类,因此类名是 array,故而在类外定义带参构造函数的完整形式是:

template < class T >
T & array< T >::array( int n )
{
    num = new T[n];
    length = n;
}

而如果是在类内部定义该函数,则会相对简单一些:

array( int n )
{
    num = new T[n];
    length = n;
}

本例中用到了前面所介绍的很多知识点,例如将默认构造函数置为 private 属性,重载下标操作符,重载输出操作符等,这些知识点希望能够仔细领会。

模板类至少有一个类参数,但是可以有多个类参数,每一个类参数前都必须有关键字 class 或者类型名

template< class T, class S, class R>
class test
{
public:
    S fun( R r);
private:
    T x;
};

本例就是一个具有多个类参数的模板类示例。

posted @ 2022-08-19 22:47  luoganttcc  阅读(14)  评论(0)    收藏  举报