下面提供一份详细讲解 C++ 函数模板和类模板的攻略:
C++ 函数模板
函数模板是一种为了泛型编程而提供的工具,它可以让我们写出可以用于不同类型数据的函数,使代码更加简洁和易于维护。函数模板的一般语法如下:
template <typename T>
返回类型 函数名(参数列表) {
// 函数实现
}
其中,typename T
表示类型参数,可以是任意数据类型,比如 int
、double
、char
等等。函数模板可以在调用时传递不同的类型参数,从而生成不同的函数,比如:
template <typename T>
T max(T a, T b) {
return a > b ? a : b;
}
int main() {
int x = max<int>(3, 4);
double y = max<double>(1.2, 3.4);
cout << x << endl; // 输出 4
cout << y << endl; // 输出 3.4
return 0;
}
在上面的代码中,我们通过函数模板定义了一个 max
函数,用于比较两个数的大小并返回较大的那个值。在 main
函数中,我们分别传入了不同类型的参数(int
和 double
),并通过 <int>
和 <double>
显示指定了类型参数,从而生成了两个不同的函数,用于处理整型和浮点型数据。
此外,如果我们没有显式指定类型参数,编译器也会在调用时自动推断出类型,比如:
int x = max(3, 4);
double y = max(1.2, 3.4);
在上面的代码中,编译器会自动推断出 max<int>
和 max<double>
,并生成相应的函数。
C++ 类模板
类模板是一种可以用来生成类的模板,它类似于函数模板,只不过它生成的是类而不是函数。一个基本的类模板定义如下:
template <typename T>
class 类名 {
public:
// 类成员
};
其中,typename T
表示类型参数。类模板的成员函数和成员变量都可以用类型参数来表示不同的数据类型,比如:
template <typename T>
class Vector {
public:
Vector() {
capacity = 10;
size = 0;
data = new T[capacity];
}
~Vector() {
delete[] data;
}
void push_back(T value) {
if (size >= capacity) {
int newCapacity = capacity * 2;
T* newData = new T[newCapacity];
for (int i = 0; i < size; i++) {
newData[i] = data[i];
}
delete[] data;
data = newData;
capacity = newCapacity;
}
data[size++] = value;
}
// 其他成员函数
private:
T* data;
int size;
int capacity;
};
在上面的代码中,我们定义了一个 Vector
类模板,用于存储不同类型的数据。其中成员变量 data
、size
和 capacity
都用类型参数 T
来表示,在类的实例化时会根据传入的类型参数生成相应的变量。同样,成员函数 push_back
也用类型参数 T
来表示,用于接收不同类型的数据并存储到 data
数组中。
在实际代码中,我们可以通过使用类模板来生成不同类型的类,比如:
Vector<int> a;
Vector<double> b;
在上面的代码中,我们分别传入了不同类型的类型参数 int
和 double
,从而生成了两个不同的类 Vector<int>
和 Vector<double>
。我们可以使用这些类进行不同类型的数据操作,如下所示:
a.push_back(1);
b.push_back(1.2);
a.push_back(2);
b.push_back(3.4);
cout << a.size << endl; // 输出 2
cout << b.size << endl; // 输出 2
cout << a.data[0] << endl; // 输出 1
cout << b.data[1] << endl; // 输出 3.4
总之,函数模板和类模板的使用能够让我们编写更加灵活和通用的代码,提高代码的复用性和可维护性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ 函数模板和类模板详情 - Python技术站