21xrx.com
2024-12-22 21:26:59 Sunday
登录
文章检索 我的文章 写文章
函数模板和类模板
2023-06-29 13:24:09 深夜i     --     --
函数模板 类模板 泛型编程 参数化类型 模板参数

在C++编程语言中,模板是非常有用的管道,它允许程序员创建通用的功能和类型,以适应各种不同的需求。有两种类型的模板可用:函数模板和类模板。让我们更深入地了解一下这些。

函数模板:

函数模板是一种可以生成任何数据类型的函数的模板。它使编写可重复使用的代码变得更容易,因为参数可以是不同的数据类型。然后,C++编译器根据传递给函数的实参类型来调用正确的函数模板。例如:


template <typename T>

T maximum(T x, T y) {

  return (x > y) ? x : y;

}

int main() {

  int num1 = 10;

  int num2 = 20;

  int max_int = maximum(num1, num2);

  double dbl1 = 12.5;

  double dbl2 = 10.7;

  double max_dbl = maximum(dbl1, dbl2);

  return 0;

}

上面的代码中,maximum()函数作为一个模板函数,可以接受不同数据类型的参数,如int和double。当程序运行时,根据传递给函数的实参类型,C++编译器将自动调用正确的函数模板。

类模板:

类模板是用于定义通用类的模板。与函数模板类似,它生成一个可以用于不同数据类型的类。与普通类不同,类模板具有一个或多个类型参数,它们用于指定类中数据成员的类型。例如:


template <class T>

class Stack {

private:

  T elements[100];

  int top;

public:

  void push(T value) {

    elements[++top] = value;

  }

  T pop() {

    return elements[top--];

  }

};

int main() {

  Stack<int> intStack;

  intStack.push(10);

  intStack.push(20);

  intStack.push(30);

  cout << intStack.pop() << endl;

  cout << intStack.pop() << endl;

  Stack<string> stringStack;

  stringStack.push("Hello");

  stringStack.push("World");

  cout << stringStack.pop() << endl;

  cout << stringStack.pop() << endl;

  return 0;

}

在这个例子中,Stack类被定义为一个类模板,它接受一个类型参数T,用于指定元素的类型。然后,使用int和string类型的实例化Stack类,并使用push()和pop()函数将元素添加到堆栈中并从中弹出。

总结:

函数模板和类模板是C++编程语言中非常强大且通用的工具。使用它们可以使代码更清晰、更灵活,并能够适应各种不同的数据类型和需求。如果您想让代码可维护和可重用,模板是必不可少的一部分。

  
  

评论区

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