gpt4 book ai didi

c++ - 运算符重载为友元函数错误

转载 作者:行者123 更新时间:2023-11-28 05:42:32 25 4
gpt4 key购买 nike

我正在尝试使用 + 添加 2 个 vector (数学 vector )。这是我的代码:

class Vector{
double v[Max_size];
int dim;
public:
int getDim() const;
Vector();
Vector(int n);
Vector(const Vector& a);
Vector add(const Vector&b);
friend Vector operator+(Vector summand1, Vector summand2);
};

运算符重载:

Vector operator+(Vector summand1, Vector summand2){
int dim1 = summand1.getDim();
int dim2 = summand2.getDim();
assert(dim1 == dim2);
Vector sum(dim1);
int i;
for(i = 0; i < dim1; i++){
sum.v[i] = summand1.v[i] + summand2.v[i];
}
return sum;
}

以及我如何使用它:

Vector m = v+t;

当我运行代码时,它总是显示 m 是 (0,0) (2D vector ),这是构造函数生成的默认值。它出什么问题了?谢谢!

最佳答案

你的拷贝构造函数:

Vector::Vector(const Vector& a){
dim = a.dim;
Vector(dim);
}

正确设置了 dim 成员的值,但没有其他副作用。

您应该有以下代码的变体:

Vector::Vector(const Vector& a) : dim(a.dim) {
std::copy(std::begin(a.v), std::end(a.v), v);
}

这实际上会复制参数中存在的数据,您将看到代码的正确行为:

// Copy constructor called here, but did not correctly copy the data before.
Vector m = v + t;

为了更好的(我希望更简单和更安全的)Vector 类,如果您可以访问至少兼容 C++11 的编译器,您可以编写:

class Vector{
std::array<double, Max_size> v; // Note the std::array here.
int dim;
public:
int getDim() const;
Vector();
Vector(int n);
Vector(const Vector& a);
Vector add(const Vector&b);
friend Vector operator+(Vector summand1, Vector summand2);
};

std::array 将处理所有事情,只要您像这样编写复制构造函数:

Vector::Vector(const Vector& a) : v(a.v), dim(a.dim) {

}

或者,更好的是,您可以让编译器自己生成复制构造函数,具有相同的行为。

关于c++ - 运算符重载为友元函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36836808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com