答案:C++模板类通过template定义泛型类,如MyVector,支持类型无关的通用设计,成员函数需在头文件中实现,实例化时指定具体类型,并注意操作合法性与多参数、特化等特性。

在C++中,模板类是泛型编程的核心工具之一。它允许你编写与数据类型无关的通用类,从而提升代码复用性和灵活性。下面介绍如何自定义一个模板类,并简要说明其设计要点。
定义一个基础模板类
使用 template 关键字声明模板参数,然后定义类。例如,实现一个简单的动态数组模板类:
templateclass MyVector { private: T* data; size_t size; size_t capacity; public: explicit MyVector(size_t initial_capacity = 10); ~MyVector(); void push_back(const T& value); void pop_back(); T& operator[](size_t index); size_t getSize() const; };
上面的 T 是一个占位类型,在实例化时会被具体类型(如 int、string 等)替换。
实现模板类成员函数
成员函数的实现也需要以 template 开头,并且通常放在头文件中(因为编译器需要在编译时看到完整定义):
立即学习“C++免费学习笔记(深入)”;
templateMyVector ::MyVector(size_t initial_capacity) : size(0), capacity(initial_capacity) { data = new T[capacity]; } template MyVector ::~MyVector() { delete[] data; } template void MyVector ::push_back(const T& value) { if (size >= capacity) { // 简单扩容策略 T* new_data = new T[capacity * 2]; for (size_t i = 0; i < size; ++i) { new_data[i] = data[i]; } delete[] data; data = new_data; capacity *= 2; } data[size++] = value; } template T& MyVector ::operator[](size_t index) { return data[index]; } template size_t MyVector ::getSize() const { return size; }
使用自定义模板类
实例化模板类时指定具体类型:
int main() {
MyVector vec;
vec.push_back(10);
vec.push_back(20);
for (size_t i = 0; i < vec.getSize(); ++i) {
std::cout << vec[i] << " ";
}
return 0;
} 这样就创建了一个存储 int 类型的 MyVector 对象。
模板设计注意事项
- 模板必须定义在头文件中:链接器无法处理分离编译的模板实现。
- 支持任意类型的前提是操作合法:比如你的类中调用了 T() 或 operator=,那么传入的类型必须支持这些操作。
-
可以有多个模板参数:如 template
。 - 可特化模板:对特定类型提供定制实现,比如全特化或偏特化。
基本上就这些。掌握模板类的定义和使用,是深入C++泛型编程的第一步。理解类型推导、内存管理以及编译期多态机制,能帮助你写出更高效、更安全的通用组件。










