21xrx.com
2024-12-23 01:40:24 Monday
登录
文章检索 我的文章 写文章
函数模板和类模板
2023-07-04 20:05:54 深夜i     --     --
函数模板 类模板 泛型编程 参数化类型 模板实例化

函数模板和类模板是C++中两个非常重要的概念。它们分别是用于创建可复用的函数和类的模板。下面我们将逐一介绍这两种模板,并且几个例子来帮助您更好地理解。

函数模板是一种函数定义,它为具有不同数据类型参数的函数提供了通用的模板。函数模板使得可以编写只需要一次编写即可针对不同数据类型工作的通用函数。例如,下面是一个用于交换两个整数的函数模板:


template <typename T>

void swap(T& a, T& b)

  T temp = a;

  a = b;

  b = temp;

上述代码中的 T 叫做模板参数类型,您可以自己选择任何名称。当使用函数模板的时候,您需要指定模板参数类型。例如:


int main()

{

  int a = 5, b = 7;

  swap(a, b);  // 第一次调用:T被推导为int

  double c = 2.5, d = 3.7;

  swap(c, d);  // 第二次调用:T被推导为double

}

类模板是一个用于创建具有通用和灵活性的数据类型的模板。类模板中的数据成员和成员函数都可以使用该类模板的参数类型和参数。例如,下面是一个可用于包含元素的vector类的模板:


template <typename T>

class vector

{

 private:

  T* arr;

  int size;

 public:

  vector(T* arr, int size)

  {

    this->arr = new T[size];

    this->size = size;

    for (int i = 0; i < size; i++)

      this->arr[i] = arr[i];

  }

  void print()

  {

    for (int i = 0; i < size; i++)

      cout << arr[i] << " ";

    cout << endl;

  }

};

int main()

{

  int arr[3] = 2;

  vector<int> v1(arr, 3);

  

  float brr[3] = 2.2;

  vector<float> v2(brr, 3);

  

  v1.print();

  v2.print();

  return 0;

}

上述代码定义了一个vector类模板,在此代码中,vector类将使用模板参数类型 T 作为其元素类型。main()函数中的两个实例化对象定义分别是 vector 和 vector ,可在其中存储int和float类型的元素。

总体而言,函数模板和类模板是 C++ 中的两种非常重要的概念,它们都可以帮助您创建可复用的代码。与函数模板不同,类模板允许您创建多个成员函数和成员变量,因此常用于定义通用的数据结构。具体使用哪种类型的模板,取决于您使用的程序类型的需求和功能。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复