0

演算子のオーバーロードを使用して基本的な行列演算を実行するプログラムを試しています。以下は私のコードです:-

行列を保持するためのクラス

class matrix {
    int r, c;
    int *data;

    public :
    matrix()  //default contstructor
    {
        r=0; c=0;
        data = NULL;
    }

    matrix(int a, int b)   //general matrix constructor.
    {
        r = a; c = b;
        data = new int[sizeof(int) * r * c];;
    }

    //Overloading + operator.
    matrix operator +(matrix & M);

             //Overloading = operator.
    void operator =(matrix & M);
};

次に、以下のように一時的なグローバル オブジェクトを作成しました。

matrix temp;

以下のように + 演算子をオーバーロードしました。上記で作成したグローバル オブジェクト 'temp' を使用して、結果の行列を保存して返す必要があることに注意してください。データ メンバーの 1 つは int* であり、ローカル スコープのオブジェクトを返すことはできません。

// Addition of matrix
matrix matrix :: operator+(matrix & M)
{
         if(M.r != r || M.c != c) {
           cout<<"Addition is not possible!";
           return temp;
         }
         temp.r = r;
         temp.c = c;
         temp.data = new int(sizeof(int) * r * c);

         for(int i=0; i<r; i++)
         for(int j=0; j<c; j++)
          *(temp.data +(i*c +j)) = *(data +(i*c +j)) + *(M.data +(i*c +j));

     return temp;
}

わかりました、プログラムはうまく機能します...しかし、私の質問は、この外部の「一時」オブジェクトに代わる効率的な方法はありますか?

4

1 に答える 1