(15點)有關operator overloading的問題

程式碼如下 ,

小弟想重新定義<<及>>運算元,

試了好久卻不知道是哪裡出了問題,

請高手告知我到底哪裡有問題,

並請附上正確的程式碼給我!THX~!!

#include <iostream>

#include <iomanip>

using namespace std;

class Matrix

{

private:

int array[3][3];

public:

Matrix();

friend istream & operator>>(istream & ,Matrix &);

friend ostream & operator<<(ostream & ,Matrix &);

Matrix operator+(Matrix &);

};

Matrix::Matrix()

{

for (int i=0 ; i< 3 ; i++) {

for (int j =0 ; j < 3 ; j++) {

array[i][j] = 0;

}

}

}

istream & operator>>(istream& is, Matrix & m1)

{

for (int i=0 ; i< 3 ; i++) {

for (int j =0 ; j < 3 ; j++) {

cin>>m1.array[i][j];

}

}

}

ostream & operator<<(ostream & os,Matrix & m1)

{

for (int i = 0 ; i < 3 ; i++) {

cout<<\"[\";

for (int j = 0 ; j < 3 ; j++) {

cout<<m1.array[i][j];

}

cout<<\"]\"<<endl;

}

}

Matrix Matrix ::operator+(Matrix & m2)

{

for (int i=0 ; i< 3 ; i++) {

for (int j =0 ; j < 3 ; j++) {

array[i][j] = array[i][j] + m2.array[i][j];

}

}

return *this;

}

void main()

{

Matrix m1 , m2 , m3;

cout<<\"Input 1 Matrix : \"; cin>>m1;

cout<<\"Input 2 Matrix : \"; cin>>m2;

m3 = m2 + m1;

cout<<m1;

cout<<m2;

cout<<m3;

}

Update:

謝謝av大大!

可是我的程式還是不能RUN...

可以給我您可以RUN的程式碼嘛?

Update 2:

謝謝Jaja大大!

這個問題我倒是沒發現!

不過我主要的問題是在operator overloadig那邊還是搞不定...

2 Answers

Rating
  • 1 decade ago
    Best Answer

    1. 你的 operator<< 與 operator>>都沒 return value, 但你的宣告卻是要 return 一個 ostream& 與 istream&, 所以 compile 不過.

    加一個 return *os 跟 return *is 就行了

    2. 再者,你的 opereator<< (或 >> ) 有讀入參數 ostream& (或 istream&),但你的 function 本體卻沒用到,不覺得很奇怪嗎?

    把 cin 改成 is, cout 改成 os 就行了.

    3. 你的 operator<< 與 operator+ 的參數 Matrix& 都沒加 const, 這在目前不會有問題,東西做大了才會吃到苦頭.

  • 1 decade ago

    Matrix Matrix ::operator+(Matrix & m2)

    {

    for (int i=0 ; i< 3 ; i++) {

    for (int j =0 ; j < 3 ; j++) {

    array[i][j] = array[i][j] + m2.array[i][j];

    }

    }

    return *this;

    }

    這邊寫錯了,你把自己的 array 的值拿來加了,

    所以 m1+m2 的話 m1 的 array 值會變。

    m2 + m1 的話, m2 的 array 值會變。

    幫你改寫如下

    Matrix Matrix ::operator+(Matrix & m2)

    {

    Matrix m;

    for (int i=0 ; i< 3 ; i++) {

    for (int j =0 ; j < 3 ; j++) {

    m.array[i][j] = this->array[i][j] + m2.array[i][j];

    }

    }

    return m;

    }

Still have questions? Get your answers by asking now.