[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