Răspuns :
Mat.h
#pragma once
#include <iostream>
using std::cout, std::cin, std::endl;
class Mat
{
private:
double **mData;
unsigned short mRows, mCols; // unsigned short <=> întreg fără semn pe 16 biți
public:
Mat(unsigned short, unsigned short);
Mat(unsigned short);
Mat();
Mat(const Mat &);
Mat operator+(const Mat &);
Mat operator*(const Mat &);
Mat operator^(const Mat &);
double getValue(unsigned short, unsigned short) const;
void setValue(unsigned short, unsigned short, double);
unsigned short getRows() const;
unsigned short getCols() const;
~Mat();
friend std::ostream &operator<<(std::ostream &COUT, Mat &matObj);
};
Explicație:
Ai cei 4 constructori ( 3 + ăla de copiere ) din enunț, primul care ia ca parametrii numărul de linii și coloane și ne alocă dinamic un tablou bidimensional cu valorile respective.
Al doilea care îți ia doar numărul de coloane și alocă o matrice cu o linie și N coloane.
Al treilea care efectiv îți crează o matrice goală ( 0 linii, 0 coloane ).
Și ăla de copiere.
Ai supraîncărcarea fiecărui operator (+, * și ^)
- pentru + verifică dacă cele 2 matrice au același număr de linii și coloane, dacă e îndeplinită condiția adună element cu element și salvează totul într-o matrice nouă pe care o și returnează
- pentru * e aceași idee doar că în loc să le adune le înmulțește ( dacă nu se îndeplinește condiția la niciuna dintre aceste 2 operații atunci returnăm o matrice goală ).
- pentru ^ verifică dacă numărul de linii din prima matrice este egal cu numărul de coloane din a doua. Dacă nu e îndeplinită condiția returnează o matrice goală, dacă e îndeplinită face calculele și le salvează într-o matrice nouă pe care o și returnează.
Ți-am supraîncărcat și operatorul << ca să poți vedea matricele.
Mai ai și niște gettere și settere și un destructor care îți dealocă memoria alocată-n constructori.