我有一个c ++泛型类,如下所示:
template <class T, int N> class TwoDimArray{
private:
T tda_[N][N];
int n_;
public:
TwoDimArray(T tda[][N]){
..
}
~TwoDimArray(){
..
}
..
}
我如何编写一个复制构造函数,我可以这样调用它:
int a1[][2] = { 1, 2, 3, 4 };
TwoDimArray <int, 2> tdm1(a1);
TwoDimArray tdm1Copy (tmd1); // or whatever the correct form is
我希望我很清楚。
答案 0 :(得分:1)
您的代码中有很多拼写错误,但声明复制构造函数很简单:
TwoDimArray(const TwoDimArray& rhs){/*implement it here*/}
复制构造函数是模板类的一部分,因此您必须在复制时指定模板类型
TwoDimArray<int, 2> tdm1Copy (tdm1); // specify <int,2> as the type
或使用auto
auto tdm1Copy(tdm2);
以下完整的工作示例:
#include <iostream>
template <class T, int N> class TwoDimArray {
private:
T tda_[N][N];
int n_;
public:
TwoDimArray(T tda[][N]) {
// implement
}
~TwoDimArray() {
// implement
}
TwoDimArray(const TwoDimArray& rhs) // don't really need this
{
// implement
}
};
int main()
{
int a1[][2] = { 1, 2, 3, 4 };
TwoDimArray <int, 2> tdm1(a1);
TwoDimArray<int, 2> tdm1Copy (tdm1); // specify <int,2> as the type
}
除非您是为了完成家庭作业或学习目的而这样做,否则只需使用std::vector<std::vector<T>>
来“模拟”二维数组。
附加注释:由于您的类包含数组(而不是指针,它们不相同),因此您不需要复制构造函数。默认的复制构造函数为您完成,即按元素复制数组元素。所以,只需完全摆脱复制构造函数,让编译器生成一个默认值。