オペレータオーバーロード関数の定義後にエラーが発生する理由はわかりません: 'operator ='(オペランドタイプは 'Matrix'と 'Matrix')、a1 + a4演算子+オーバーロード関数が返す1つの行列オブジェクトの後です。ここでa1 =オブジェクト行列ですか?C++オペレータオーバーロード
#include<iostream>
using namespace std;
//write your code here
class Matrix{
private:
int arr[3][3];
public:
friend istream& operator >> (istream& in,Matrix &matrix);
friend ostream& operator << (ostream& out,const Matrix& matrix);
friend Matrix operator + (Matrix &a,Matrix &b);
void setArr(int i,int j,int data){
arr[i][j] = data;
}
int getArr(int i,int j){
return arr[i][j];
}
Matrix& operator = (Matrix &b);
};
istream& operator >> (istream& in,Matrix &matrix)
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
in >> matrix.arr[i][j];
return in;
}
ostream& operator << (ostream& out,const Matrix &matrix){
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
out << matrix.arr[i][j] << " ";
out << endl;
}
return out;
}
Matrix operator + (Matrix &a,Matrix &b){
Matrix temp;
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
temp.setArr(i,j,(a.getArr(i,j)+b.getArr(i,j)));
return temp;
}
Matrix& Matrix::operator = (Matrix &b){
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
arr[i][j] = b.getArr(i,j);
return *this;
}
int main()
{
Matrix a1,a2,a3,a4;
cin >> a1;
cin >> a2;
a4 = a2;
a3 = (a1+a4); //an error over there
cout << a1 << endl;
cout << a2 << endl;
cout << a3 << endl;
return 0;
}
'Matrix&Matrix :: operator =(const Matrix&b){...}'を使用するとどうなりますか? **パラメータには 'const'を使用することに注意してください**。 –
すでに述べられていること以外にも、演算子+()は引数として定数参照を取るべきでしょう。なぜなら、オペランドを変更することは想定されていないからです。現在の形では、あなたは 'a4 = a1 + a2 + a3'のようなことをすることもできません。 – Paulo1205
これはかなり良いMatrixクラスです。私はすべての '3 'を' size'(constexpr size_t size = 3; ')で置き換えて、マジックナンバーを削除し、' int&operator()(int row、int column) 'をセルへのアクセスを提供し、不必要なフラッシングを避けるために 'out << '\ n';' '' 'operator <<'で 'out << endl;'をスワップします。 – user4581301