带有参数复制构造函数的 C++ 模板 class
C++ template class with argument copy constructor
我有一个 C++ 泛型 class,看起来像这样:
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
希望我说清楚了。
您的代码中有很多拼写错误,但声明一个复制构造函数很简单:
TwoDimArray(const TwoDimArray& rhs){/*implement it here*/}
复制构造函数是模板的一部分class,所以复制时必须指定模板类型
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>>
到 "simulate" 二维数组。
补充说明:因为你的class包含一个数组(而不是指针,它们不一样),你不需要复制构造函数。默认的复制构造函数会为你做这件事,即逐个元素复制数组。所以,完全摆脱复制构造函数,让编译器生成一个默认的。
我有一个 C++ 泛型 class,看起来像这样:
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
希望我说清楚了。
您的代码中有很多拼写错误,但声明一个复制构造函数很简单:
TwoDimArray(const TwoDimArray& rhs){/*implement it here*/}
复制构造函数是模板的一部分class,所以复制时必须指定模板类型
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>>
到 "simulate" 二维数组。
补充说明:因为你的class包含一个数组(而不是指针,它们不一样),你不需要复制构造函数。默认的复制构造函数会为你做这件事,即逐个元素复制数组。所以,完全摆脱复制构造函数,让编译器生成一个默认的。