我正在使用参数化构造函数编写用于创建简单C ++类的代码。我的代码如下:
#include <iostream>
using namespace std;
class CC{
public:
double h[];
double t[];
int tsize;
CC(double rs[], double ts[], int l){
for (int k = 0;k < l;k++){
t[k] = ts[k];
h[k] = rs[k];
};
tsize = l;
};
};
int main(int argc, char const *argv[])
{
double r[] = {1,4,9};
double tm[] = {1,2,3};
int s = 3;
CC CC1(r,tm,s);
cout<<CC1.h[0]<<CC1.h[1]<<CC1.h[2]<<endl;
cout<<CC1.t[0]<<CC1.t[1]<<CC1.t[2]<<endl;
};
它输出为:
149
149
然而它应该是
149
123
有人可以告诉我,我在这里做错了吗?
答案 0 :(得分:3)
在类定义中,double h[];
是一个错误。您必须将数组的边界指定为类定义的一部分,例如:
double h[5];
然后在您的构造函数中检查您是否收到l > 5
。 (顺便说一句,不要使用l
作为变量名,它看起来太像1
)。您的编译器应该给出错误。
如果您在编译时不知道制作阵列有多大,那么就不能使用C风格的数组。而是使用C ++风格的数组;那些被称为向量:
vector<double> h, t;
由于可以通过传递一对绑定初始数据的指针来初始化向量,因此可以像这样编写构造函数:
CC(double rs[], double ts[], int length)
: h(rs, rs+length), t(ts, ts+length), tsize(length)
{ }
额外奖励:如果您传递实际数组(不是指针),可以从传入的数组中推断出长度:
template<size_t length>
CC(double (&rs)[length], double (&ts)[length])
: h(rs, rs+length), t(ts, ts+length), tsize(length)
{ }
用法:
CC cc1(r, tm);
除了其他构造函数之外,您可以使用此构造函数。