[英]Operator overloading as friend function error
我正在嘗試使用+添加2個向量(數學向量)。 這是我的代碼:
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(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) {
}
或者,甚至更好的是,您可以讓編譯器本身以相同的行為生成副本構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.