C++中的模板是一种定义函数或类的通用机制。通俗地说,模板可以根据不同的类型自动生成不同的函数或类。这使得代码更加灵活和可重用性更高。
在C++中,我们可以定义函数模板和类模板。函数模板用于生成自动产生类型的函数,而类模板用于自动产生类。
函数模板
函数模板定义的语法很简单:
template <typename T>
ret-type func-name(parameter-list) { /*函数定义*/ }
其中,typename T
是模板的参数列表,可以有多个参数,并且可以使用任何合法的标识符表示类型。接下来是函数的返回值和参数列表,和普通函数一样。
下面是一个函数模板的具体例子:
#include <iostream>
using namespace std;
template <typename T>
T GetMax (T a, T b) {
return (a>b)? a : b;
}
int main () {
int i=5, j=6, k;
long l=10, m=5, n;
k=GetMax<int>(i,j);
n=GetMax<long>(l,m);
cout << k << endl;
cout << n << endl;
return 0;
}
在上面的代码中,我们定义了一个函数模板 GetMax
,它接受两个同类型参数,返回较大的值。在主函数中,我们使用 GetMax<int>
来调用该函数,并将 i
和 j
作为参数传递给函数,得到 5
。而再次调用该函数时使用 GetMax<long>
,将 l
和 m
传递给函数得到 10
。
类模板
类模板的定义稍微复杂一些,但总体上看起来和函数模板差不多:
template <typename T>
class class-name {
/* 类定义 */
};
其中,typename T
仍然是模板的参数列表,接下来是类定义,其中可以使用任意的 T 类型。
下面是一个类模板的例子:
#include <iostream>
using namespace std;
template <typename T>
class Stack {
private:
T data[100];
int top;
public:
Stack() {
top = -1;
}
void push(T element) {
if (top >= 99) {
cout << "Stack Overflow!" << endl;
return;
}
data[++top] = element;
}
T pop() {
if (top < 0) {
cout << "Stack Underflow!" << endl;
return T();
}
return data[top--];
}
};
int main() {
Stack<int> s1;
s1.push(10);
s1.push(20);
cout << s1.pop() << endl;
cout << s1.pop() << endl;
Stack<double> s2;
s2.push(3.14);
s2.push(2.718);
cout << s2.pop() << endl;
cout << s2.pop() << endl;
return 0;
}
在上面的代码中,我们定义了一个 Stack
类模板。它可以接受任何类型的元素。在主函数中,我们首先定义了一个 Stack<int>
类型的对象 s1
,并调用 push
函数将 10
和 20
压入栈中。接下来,我们先调用 pop
函数弹出 20
,然后又弹出 10
。这样,我们实现了一个能够正常工作的整型栈。
然后,我们定义了另一个 Stack<double>
对象 s2
,将 3.14
和 2.718
加入其中,在调用 pop
方法后将会按照后进先出的方式输出 2.718
和 3.14
。
以上就是C++中模板的详细讲解和示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中的模板是什么? - Python技术站