Witam. :)
Robię właśnie kalkulator macierzy - projekt na zaliczenie.
Mam już taki fragment kodu:
template<class TYP>
class Macierz {
private:
int m;
int n;
protected:
TYP **el;
public:
Macierz(int m,int n)
: m(m), n(n) {
el = new TYP *[m];
for(int i=0;i<m;i++)
el[i] = new TYP[n];
}
Macierz(int m)
: m(m), n(m) {
el = new TYP *[m];
for(int i=0;i<m;i++)
el[i] = new TYP[m];
}
Macierz(const Macierz &macierz)
: m(macierz.m), n(macierz.n) {
el = new TYP *[m];
for(int i=0;i<m;i++)
el[i] = new TYP[n];
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
el[i][j] = macierz.el[i][j];
}
~Macierz() {
for(int i=0;i<m;i++)
delete [] el[i];
delete [] el;
}
int getM() { return m; }
int getN() { return n; }
void wpisz() {
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
cin >> el[i][j];
}
void wypisz() {
for(int i=0;i<m;i++) {
for(int j=0;j<n;j++)
cout << el[i][j] << " ";
cout << endl;
}
}
Macierz operator+(const Macierz macA) {
if((m == macA.m) && (n == macA.n)) {
Macierz<TYP> macB(m,n);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
macB.el[i][j] = macA.el[i][j] + el[i][j];
return macB;
}
else {
cout << "Rozmiary macierzy nie sa poprawne!" << endl;
Macierz<TYP> mac(0,0);
return mac;
}
}
Macierz operator*(const Macierz macA) {
if(n == macA.m) {
Macierz<TYP> macB(m,macA.n);
for(int i=0;i<macB.m;i++) {
for(int j=0;j<macB.n;j++) {
TYP suma = 0;
for(int k=0;k<n;k++)
suma += el[i][k] * macA.el[k][j];
macB.el[i][j] = suma;
}
}
return macB;
}
else {
cout << "Rozmiary macierzy nie sa poprawne!" << endl;
Macierz<TYP> mac(0,0);
return mac;
}
}
Macierz operator*(TYP stala) {
Macierz<TYP> macB(m,n);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
macB.el[i][j] = stala * el[i][j];
return macB;
}
Macierz<TYP> transponuj() {
Macierz<TYP> macB(n,m);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
macB.el[j][i] = el[i][j];
return macB;
}
};
W zadaniu postawiono wymagania: min. 7 klas, w tym 5 ułożonych w logiczną hierarchię.
Powinienem rozbić moją klasę Macierz na kilka klas, np. Dodawanie, Mnozenie, etc.?
Czy może jakoś inaczej mam ułożyć klasy w "logiczną hierarchię"?