Czy klasa jest poprawnie zdefiniowana

0

Witam, mam pytanie, otóz mam takie polecnie:
Napisz program umożliwiający proste działania na macierzach. Program powinien być napisany obiektowo, jego zasadniczą częścią będzie odpowiednio zdefiniowany obiekt reprezentujący pojedynczą macierz. Dla uproszczenia można operować na macierzach o wymiarze 3 x 3. Obiekt „Macierz” powinien mieć co najmniej dwa konstruktory: konstruktor tworzący macierz o ustalonych wartościach i konstruktor bezparametryczny, tworzący macierz o wartościach domyślnych (np. macierz jednostkową). Dla macierzy należy zdefiniować operatory dodawania, odejmowania, mnożenia i podnoszenia do potęgi (można wykorzystać operator ^). Dla wygody obiekt powinien mieć funkcję „wyświetl” umożliwiającą wyświetlenie całej macierzy na ekranie. Proszę pamiętać, aby program napisać w taki sposób, aby był możliwie przenośny.

I mam pytanie czy poprawnie zdefiniowałem klasę?
class Macierz
{
int macierz[3][3];
public:
int dodawanie();
int odejmowanie();
int mnozenie();
int potegowanie();
int wyswietl();
Macierz();
Macierz(int a,int b,int c,int d,int e,int f,int g, int h,int i);
};

3

NIE!
Co ma niby robić ta cześć:

int dodawanie();
int odejmowanie();
int mnozenie();
int potegowanie();
int wyswietl();

Ani argumenty ani wartość zwracana nie mają sensu dla obietnic jakie dają nazwy tych metod.

2

Zrób sobie checklistę tego, co wymienia zadanie, oraz tego co masz. Zauważysz pewne braki. A w tym co "masz" też wszystko jest właściwie źle.

Przy okazji: https://dsp.krzaq.cc/post/304/jak-przeladowywac-operatory-w-mojej-klasie/

1

Nie. Na początek coś takiego:

class Macierz33
{
    private:
    int macierz[3][3]={};
    public:
    Macierz33 operator+(const Macierz33 &m)const;
    Macierz33 operator-(const Macierz33 &m)const;
    Macierz33 operator*(const Macierz33 &m)const;
    Macierz33 operator^(unsigned exponent)const;
    double operator()(int y,int x)const { return macierz[y][x]; }
    double &operator()(int y,int x) { return macierz[y][x]; }
    ostream &out(ostream &s);
    Macierz();
    Macierz(int diagValue);
};
inline ostream &operator<<(ostream &s,const Macierz33 &m) { return m.print(out); }
0

@_13th_Dragon: Czy mozna to zrobic bez tego "friend"? bo jeszcze tego nie mielismy na zajeciach, i mam prosbe, mogłbys napisac chociaz ten operator np dodawania? bo kompletnie nie wiem o co w tym chodzi a chcialbym to ogarnac i sprobowac samemu zrobic reszte

1

@m12344321:
Dodawanie i odejmowanie są dość oczywiste, dodajesz/odejmujesz odpowiednie elementy, macierze, są oczywiście o takich samych rozmiarach. W internecie jest tego sporo, np.:
https://www.geeksforgeeks.org/matrix-operations-using-operator-overloading/
Pytanie o mnożenie, czy Masz zaimplementować mnożenie macierzy, czy Hadamard product; i o co oprzeć potęgowanie?

0

zamiast robić funkcje działań artmetycznych, to proponuję zrobić przeładowanie operatorów + - * / = i nie zapomnij o reguła trzy/pięć/zero

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