类和运算符
Classes and operators
本文关键字:运算符 更新时间:2023-10-16
我正在学习用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;"行之后改变了它的两个第一个条目。
我不知道发生了什么,从昨天开始我就在处理这个问题。不能让这么简单的函数工作有点令人沮丧。。。请帮帮我!
非常感谢。
附言:我不知道这是否重要,但我使用Code::Blocks作为我的IDE,我在一台装有Windows8的电脑上。
这是其他功能:
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;
}
我怀疑这是三条规则让你上当。
由于您没有定义复制构造函数,并且经常按值将对象传入函数和传出函数,因此C++将以一种简单的方式复制对象,其中副本共享同一指针成员。但是,如果其中一个副本被销毁,它会调用您的析构函数,并且内存会被释放,即使它正被另一个eucVector
使用。
相关文章:
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 关闭||运算符优化
- 通过继承类使用来自不同命名空间的运算符
- C++Cast运算符过载
- 如何使用AngelScript注册SFML Vector2运算符
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 布尔比较运算符是如何在C++中工作的
- 重载运算符new[]的行为取决于析构函数
- 如何防止clang格式在流运算符调用之间添加换行符<<