-1
我正在嘗試使用矩陣做一個簡單的練習,並且我想實現這個操作:矩陣a,矩陣b,矩陣c(a),矩陣d = a,矩陣e = a + b。目前我保持簡單,但後來我想做同樣的事情,但動態分配和後來的智能指針。複製構造函數,而不是運算符=
我宣佈了一個明確的拷貝構造函數,並且我重載了operator =,我還聲明瞭一個析構函數,所以我有三條規則。
這裏是我的功能:
Matrix& Matrix::operator=(const Matrix& opEven)
{
std::cout << "Operator = " << std::endl;
for (int i = 0; i < ORD; i++)
{
for (int j = 0; j < ORD; j++)
{
arr1[i][j] = opEven.arr1[i][j];
}
}
return *this;
}
Matrix::Matrix(const Matrix& obj)
{
std::cout << "Constructing matrix using copy c-tor." << std::endl;
for (int i = 0; i < ORD; i++)
{
for (int j = 0; j < ORD; j++)
{
arr1[i][j] = obj.arr1[i][j];
}
}
}
的問題是,當我嘗試使用矩陣d =我的編譯器使用拷貝構造函數,而不是我的運算符=。
謝謝,現在它可以工作。 但我不得不稱之爲矩陣b = a,並以運算符= –
那麼,這就是C++的工作原理,當你的對象還沒有被構建時,你不能使用賦值運算符。 –
@ Teodor-MarianWolf你不能。任何形式爲「Type name = something」的東西都會調用複製構造函數。這就是語言的工作原理。 – NathanOliver