[C++] Dodawanie macierzy

0

Mam problem przy przeładowywaniu operatora +. Oto kod:

 Matrix Matrix:: operator+ (const Matrix &a)const{
    Matrix sum(size);
    for(int i = 0; i < size; i++){
        for(int j = 0; j < size; j++){
            sum.ptr[i][j] = a.ptr[i][j] + ptr[i][j];
        }
    }
    return sum;
}

A oto klasa:

class Matrix {
    int size;
    int **ptr;
public:
    Matrix():size(0){}
    Matrix(const int s):size(s){
        ptr = new int*[size];
        for(int i = 0; i < size; i++)(*(ptr+i)) = new int[size];
    }
    ~Matrix();
    Matrix(const Matrix & a);
    void input();
    Matrix operator+ (const Matrix &a)const;
    friend ostream & operator<< (ostream & out, const Matrix &a);
};

Problem jest taki, że za nim obiekt sum zostanie zwrócony (czyli suma dodawania), destruktor go likwiduje. Jak można sobie z tym poradzić ?

0

Nikt nie wie ?

0

Jak dobrze wywnioskowałeś, Matrix sum(size) rzeczywiście jest tymczasowy, widoczny tylko w tej funkcji. Skorzystaj ze wskaźników:

 Matrix *sum = new Matrix(size);

Oczywiście będziesz musiał nieco zmienić wartość zwracaną w prototypie funkcji.

0

Hmm nie bardzo rozumiem. Mam go powołać przed operatorem+? Jak go powołam w funkcji to i tak bedzie istniał tylko wewnatrz jej i strace ten adres. W jaki sposób to napisać?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0