2013-10-22 136 views
0

首先我知道乘法部分是錯誤的,但我有一些關於代碼的問題。

1.當我超載我的操作員+我打印出矩陣使用cout < < *這然後正確後我返回*這和當我做a + b對matix a和matix b它不給我同樣的事情非常混亂。


2.當我製作矩陣C在我的主要我不能使用我的默認構造函數出於某種原因,因爲當我去設置它=使用我的賦值操作符重載函數它給了我一個錯誤說:「表達式必須是可修改的雖然使用我的構造函數來設置行號和列號與使用(0,0)的默認構造函數相同

3.我的賦值operator = function使用複製構造函數使用值創建一個新矩陣在等號的右側,當我打印出c它不會給我任何東西

任何幫助將是偉大的這是我的hw的算法類,我仍然需要做的算法的乘法矩陣,但我需要先解決這些問題,我有很多麻煩,請幫助。C++賦值運算符動態數組

//Programmer: Eric Oudin 
//Date:   10/21/2013 
//Description: Working with matricies 

#include <iostream> 
using namespace std; 

class matrixType 
{ 
public: 
    friend ostream& operator<<(ostream&, const matrixType&); 

    const matrixType& operator*(const matrixType&); 
    matrixType& operator+(const matrixType&); 
    matrixType& operator-(const matrixType&); 
    const matrixType& operator=(const matrixType&); 

    void fillMatrix(); 
    matrixType(); 
    matrixType(int, int); 
    matrixType(const matrixType&); 
    ~matrixType(); 
private: 
    int **matrix; 
    int rowSize; 
    int columnSize; 
}; 
ostream& operator<< (ostream& osObject, const matrixType& matrix) 
{ 
    osObject << endl; 
    for (int i=0;i<matrix.rowSize;i++) 
    { 
     for (int j=0;j<matrix.columnSize;j++) 
     { 
      osObject << matrix.matrix[i][j] <<", "; 
     } 
     osObject << endl; 
    } 
    return osObject; 
} 
const matrixType& matrixType::operator=(const matrixType& matrixRight) 
{ 
    matrixType temp(matrixRight); 
    cout << temp; 
    return temp; 
} 
const matrixType& matrixType::operator*(const matrixType& matrixRight) 
{ 
    matrixType temp(rowSize*matrixRight.columnSize, columnSize*matrixRight.rowSize); 
    if(rowSize == matrixRight.columnSize) 
    { 
     for (int i=0;i<rowSize;i++) 
     { 
      for (int j=0;j<columnSize;j++) 
      { 
       temp.matrix[i][j] = matrix[i][j] * matrixRight.matrix[i][j]; 

      } 
     } 
    } 
    else 
    { 
     cout << "Cannot multiply matricies that have different size rows from the others columns." << endl; 
    } 
    return temp; 
} 
matrixType& matrixType::operator+(const matrixType& matrixRight) 
{ 
    matrixType temp; 
    if(rowSize == matrixRight.rowSize && columnSize == matrixRight.columnSize) 
    { 
     temp.setRowsColumns(rowSize, columnSize); 
     for (int i=0;i<rowSize;i++) 
     { 
      for (int j=0;j<columnSize;j++) 
      { 
       temp.matrix[i][j] = matrix[i][j] + matrixRight.matrix[i][j]; 
      } 
     } 
    } 
    else 
    { 
     cout << "Cannot add matricies that are different sizes." << endl; 
    } 
    return temp; 
} 
matrixType& matrixType::operator-(const matrixType& matrixRight) 
{ 
     matrixType temp(rowSize, columnSize); 
    if(rowSize == matrixRight.rowSize && columnSize == matrixRight.columnSize) 
    { 
     for (int i=0;i<rowSize;i++) 
     { 
      for (int j=0;j<columnSize;j++) 
      { 
       matrix[i][j] -= matrixRight.matrix[i][j]; 

      } 
     } 
    } 
    else 
    { 
     cout << "Cannot subtract matricies that are different sizes." << endl; 
    } 
    return *this; 
} 
void matrixType::fillMatrix() 
{ 
    for (int i=0;i<rowSize;i++) 
    { 
     for (int j=0;j<columnSize;j++) 
     { 
      cout << "Enter the matix number at (" << i << "," << j << "):"; 
      cin >> matrix[i][j]; 
     } 
    } 
} 
matrixType::matrixType() 
{ 
    rowSize=0; 
    columnSize=0; 
    matrix = new int*[rowSize]; 
    for (int i=0; i < rowSize; i++) 
    { 
     matrix[i] = new int[columnSize]; 
    } 

} 
matrixType::matrixType(int setRows, int setColumns) 
{ 
    rowSize=setRows; 
    columnSize=setColumns; 
    matrix = new int*[rowSize]; 
    for (int i=0; i < rowSize; i++) 
    { 
     matrix[i] = new int[columnSize]; 
    } 
} 
matrixType::matrixType(const matrixType& otherMatrix) 
{ 
    rowSize=otherMatrix.rowSize; 
    columnSize=otherMatrix.columnSize; 
    matrix = new int*[rowSize]; 
    for (int i = 0; i < rowSize; i++) 
    { 
     matrix[i]=new int[columnSize]; 
     for (int j = 0; j < columnSize; j++) 
     { 

      matrix[i][j]=otherMatrix.matrix[i][j]; 
     } 
    } 
} 
matrixType::~matrixType() 
{ 
    delete [] matrix; 
} 
int main() 
{ 
    matrixType a(2,2); 
    matrixType b(2,2); 
    matrixType c(0,0); 
    cout << "fill matrix a:"<< endl;; 
    a.fillMatrix(); 
    cout << "fill matrix b:"<< endl;; 
    b.fillMatrix(); 

    cout << a; 
    cout << b; 

    //c = a+b; 

    cout <<"matrix a + matrix b =" << a+b; 

    system("PAUSE"); 
    return 0; 
} 




編輯:
仍然有事情不返回什麼,我告訴它返回

回答

0
  1. 此代碼不會做你認爲它的麻煩:

    for (int j = 0; j < columnSize; j++) 
    { 
        matrix[i]=new int[columnSize]; 
        matrix[i][j]=otherMatrix.matrix[i][j]; 
    } 
    

    它分配一個列,然後複製第一個值。然後它分配另一列(忘記舊列),並複製第二個值。然後分配另一列(再次忘記舊列),並複製第三個值。

    我希望這個問題很清楚,從這個描述本身。

  2. 您是否試圖使用matrixType c();?那會宣佈一個功能。使用默認構造函數的正確語法是matrixType c;

  3. 您的運營商=並沒有實際分配任何東西。所以c = a+b;計算a+b但不會更改c

+0

是的我認爲我通過將矩陣[i] =新的int linw移動到2以上的for循環中來幫助我很好地感謝,如果我修復1將3工作? – CrimOudin

+0

仍然沒有回報我認爲他們應該返回的東西的麻煩 – CrimOudin