2017-03-31 68 views
-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 =我的編譯器使用拷貝構造函數,而不是我的運算符=。

Output:

回答

2

當你稱呼它

Martix a; 
Matrix b = a; 

它總是使用拷貝構造函數。試試這個:

Matrix a; 
Matrix b: 
b = a; 

基本上Matrix a = b;Matrix a(b);是一樣的東西,因爲你是使用矩陣b構建矩陣a,使引起拷貝構造函數調用。

+0

謝謝,現在它可以工作。 但我不得不稱之爲矩陣b = a,並以運算符= –

+0

那麼,這就是C++的工作原理,當你的對象還沒有被構建時,你不能使用賦值運算符。 –

+0

@ Teodor-MarianWolf你不能。任何形式爲「Type name = something」的東西都會調用複製構造函數。這就是語言的工作原理。 – NathanOliver

相關問題