有非类型模板参数的模板类的拷贝构造函数怎么写
时间: 2024-03-20 22:45:27 浏览: 83
对于有非类型模板参数的模板类,拷贝构造函数的实现与普通类的实现略有不同,需要在函数名后面添加与类模板参数相同的模板参数列表,例如:
```
template<class T, int SIZE>
class Stack {
public:
// 构造函数
Stack() {
this->size = SIZE;
this->p = new T[SIZE];
memset(this->p, 0, sizeof(T) * SIZE);
}
// 带参构造函数
Stack(int n) {
if (n <= 0)
n = SIZE;
this->size = n;
this->p = new T[n];
memset(this->p, 0, sizeof(T) * n);
}
// 拷贝构造函数
template<int OTHER_SIZE>
Stack(const Stack<T, OTHER_SIZE>& stac) {
this->size = stac.size;
this->p = new T[stac.size];
for (int i = 0; i < stac.size; ++i) {
this->p[i] = stac.p[i];
}
}
// 析构函数
~Stack() {
delete[] this->p;
}
private:
T* p;
int size;
};
```
在拷贝构造函数的模板参数列表中,我们需要指定拷贝的对象的非类型模板参数 `OTHER_SIZE`,并在实现中使用该参数。这里我们使用了深拷贝,将原对象的数据复制到了新对象中。
阅读全文