写一个类模板的例子,并给出其具备特化的例子
时间: 2023-11-28 10:49:22 浏览: 30
一个类模板是一种通用的类,可以用来创建多个具有相似行为和属性的对象。下面是一个简单的类模板的例子:
```c++
template<typename T>
class Array {
private:
T* arr;
int size;
public:
Array() {
arr = new T[10];
size = 10;
}
Array(int n) {
arr = new T[n];
size = n;
}
void set(int index, T value) {
if(index >= 0 && index < size) {
arr[index] = value;
}
}
T get(int index) {
if(index >= 0 && index < size) {
return arr[index];
}
return T();
}
~Array() {
delete[] arr;
}
};
```
这个类模板可以用来创建数组对象,其中模板参数T表示数组元素的类型。比如,我们可以创建一个Array<int>类型的对象来表示整数数组:
```c++
Array<int> intArr(5);
intArr.set(0, 1);
intArr.set(1, 2);
intArr.set(2, 3);
intArr.set(3, 4);
intArr.set(4, 5);
for(int i=0; i<5; i++) {
cout << intArr.get(i) << " ";
}
// 输出:1 2 3 4 5
```
我们还可以创建一个Array<double>类型的对象来表示双精度浮点数数组:
```c++
Array<double> doubleArr(3);
doubleArr.set(0, 1.1);
doubleArr.set(1, 2.2);
doubleArr.set(2, 3.3);
for(int i=0; i<3; i++) {
cout << doubleArr.get(i) << " ";
}
// 输出:1.1 2.2 3.3
```
我们还可以对这个类模板进行特化,以便为特定的类型提供自定义实现。例如,我们可以创建一个Array<bool>类型的特化,其中set和get方法的实现方式与普通的Array不同:
```c++
template<>
class Array<bool> {
private:
bool* arr;
int size;
public:
Array() {
arr = new bool[10];
size = 10;
}
Array(int n) {
arr = new bool[n];
size = n;
}
void set(int index, bool value) {
if(index >= 0 && index < size) {
arr[index] = value;
}
}
bool get(int index) {
if(index >= 0 && index < size) {
return arr[index];
}
return false;
}
~Array() {
delete[] arr;
}
};
```
这个特化版本的Array类模板可以用来创建bool类型的数组对象:
```c++
Array<bool> boolArr(4);
boolArr.set(0, true);
boolArr.set(1, false);
boolArr.set(2, true);
boolArr.set(3, false);
for(int i=0; i<4; i++) {
cout << boolArr.get(i) << " ";
}
// 输出:1 0 1 0
```