我正在学习用 C++ 编写代码,但在操作符方面遇到了麻烦。我创建了这个类:
typedef float data_type;
class eucVector
{
public:
unsigned int dim;
data_type *vdata;
eucVector();
eucVector(unsigned int);
eucVector(unsigned int, data_type*);
~eucVector();
void print();
eucVector operator + (eucVector);
};
这个类基本上是一个可变大小(dim)的欧几里得向量,并且运算符 + 将简单地添加所涉及的向量的每个条目。
这是该运算符的实现:
eucVector eucVector::operator + (eucVector y)
{
eucVector c(dim);
for (unsigned int i=0; i<dim; i++)
{
c.vdata[i] = vdata[i] + y.vdata[i];
}
return c;
}
现在,主函数如下所示:
int main()
{
eucVector a(3), b(3), c;
for (int i=0; i<3; i++)
{
a.vdata[i] = 3*i-1;
b.vdata[i] = 2*i +3;
}
cout << "a = ";
a.print();
cout << "b = ";
b.print();
cout << endl;
c = a+b;
cout << "a = ";
a.print();
cout << "b = ";
b.print();
cout << endl << "c = ";
c.print();
return 0;
}
结果是一个用零填充的向量c,更重要的是,没有命令改变它的向量b在“c=a+b;”之后改变了它的2个第一个条目。线。
我不知道发生了什么,我从昨天开始就在处理这个问题。无法让如此简单的功能正常工作有点令人沮丧......请帮助我!
非常感谢。
PS:我不知道这是否重要,但我使用 Code::Blocks 作为我的 IDE,并且我在一台装有 Windows 8 的电脑上。
这是其他功能:
eucVector::eucVector()
{
dim = 0;
vdata = NULL;
}
eucVector::eucVector(unsigned int newDim)
{
dim = newDim;
vdata = (data_type *)calloc(dim, sizeof(data_type));
}
eucVector::eucVector(unsigned int newDim, data_type* newdata)
{
dim = newDim;
vdata = (data_type *)calloc(dim, sizeof(data_type));
for(unsigned int i=0; i<dim; i++)
{
vdata[i] = newdata[i];
}
}
eucVector::~eucVector()
{
free(vdata);
}
void eucVector::print()
{
for (int i=0; i<dim-1; i++)
cout << vdata[i] << ", ";
cout << vdata[dim-1] << endl;
}