Dodawnie macierzy przeciązanie operatora

0

Witam , mam problem z przeciążeniem operatora + ma dodwać do siebie 2 macierze.

    class Macierz
    {
        private int _wiersz {get;}
        private int _kolumna { get; }
        public int[,] tabMacierz { get; set; }


        public Macierz(int wiersz, int kolumna)
        {
            _wiersz = wiersz;
            _kolumna = kolumna;
            tabMacierz = new int[_wiersz, _kolumna];
        }
        public Macierz(int wiersz, int kolumna,int[,] tab)
        {
            _wiersz = wiersz;
            _kolumna = kolumna;
            tabMacierz = tab;
        }
        public void CrtMacierz()
        {
            for (int i = 0; i < _wiersz; i++)
            {
                Console.WriteLine();
                for (int j = 0; j < _kolumna; j++)
                {
                    Console.WriteLine("wpisz kolejna wartosc do macierzy");
                    int a = int.Parse(Console.ReadLine());
                    tabMacierz[i, j] = a;
                }
            }
        }
        public void ShowMacierz()
        {
            for (int u = 0; u < _wiersz; u++)
            {
                Console.WriteLine();
                for (int w = 0; w < _kolumna; w++)
                {
                    Console.Write(tabMacierz[u, w]+" ");
                }
            }
        }
        public static Macierz[] operator +(Macierz[] M, Macierz[] M2)
        {
            Macierz[,] tabMacierzdodaa = new Macierz[3,3];
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    tabMacierzdodaa[i, j] = M[i, j] + M2[i, j];
                }
            }
            return tabMacierzdodaa;
        }
    }}

Proszę o pomoc w zrozumieniu jak zwrócić poprawie tabMacierzdodaa oraz przeciążanie operatora + w tej sytacji.

1

Dlaczego operator + zwraca tablicę macierzy zamiast pojedynczej macierzy?
I dlaczego jako parametry ma dwie tablice macierzy?

0

z robiłem tak ponieważ znak plus ma dodawać do siebie 2 macierze chce przeciążyć ten operator i po dodaniu ma dac nam 3 tablice z dodanymi 2 macierzami

1
arielva1 napisał(a):

znak plus ma dodawać do siebie 2 macierze

No właśnie, 2 macierze, a nie dwie tablice macierzy.

po dodaniu ma dac nam 3 tablice z dodanymi 2 macierzami

Według mnie po dodaniu ma zwrócić obiekt typu Macierz, a nie tablicę macierzy,albo zwykłą tablicę. Przecież po to masz klasę Macierz, która opakowuje tablicę dwuwymiarową.

0

pozmieniałem trochę ale wywala teraz błąd w konstruktorze w linijce tabMacierz = new int[_wiersz,_kolumna]
An unhandled exception of type 'System.StackOverflowException' occurred in macierz.exe

    class Macierz
    {
        private int _wiersz {get;}
        private int _kolumna { get; }
        public int[,] tabMacierz { get; set; }


        public Macierz(int wiersz, int kolumna)
        {
            _wiersz = wiersz;
            _kolumna = kolumna;
            tabMacierz = new int[_wiersz, _kolumna];
        }
        public void CrtMacierz()
        {
            for (int i = 0; i < _wiersz; i++)
            {
                Console.WriteLine();
                for (int j = 0; j < _kolumna; j++)
                {
                    Console.WriteLine("wpisz kolejna wartosc do macierzy");
                    int a = int.Parse(Console.ReadLine());
                    tabMacierz[i, j] = a;
                }
            }
        }
        public void ShowMacierz()
        {
            for (int u = 0; u < _wiersz; u++)
            {
                Console.WriteLine();
                for (int w = 0; w < _kolumna; w++)
                {
                    Console.Write(tabMacierz[u, w]+" ");
                }
            }
        }
        public static Macierz operator +(Macierz M, Macierz M2)
        {
            Macierz tabdod = new Macierz(3,3);
            return tabdod=M+M2;
        }
        public static Macierz operator -(Macierz M, Macierz M2)
        {
            Macierz tabdod = new Macierz(3, 3);
            return tabdod = M + M2;
        }
    }
    public class Program
    {
        static void Main(string[] args)
        {

                Macierz tab1 = new Macierz(3, 3);
                Macierz tab2 = new Macierz(3, 3);
                tab1.CrtMacierz();
                tab2.CrtMacierz();
                Macierz tab3 = new Macierz(3, 3);
                tab3 = tab2 + tab1;
                tab3.ShowMacierz();
                Console.ReadKey();

            }
1

W operatorze sumy macierzy wywołujesz operator sumy macierzy. To nie ma prawa działać :P

1
public static Macierz operator +(Macierz M, Macierz M2)
{
         Macierz tabdod = new Macierz(3,3);
         return tabdod=M+M2;
} 

Tutaj masz nieskończoną rekurencję. W operatorze + wołasz ten sam operator + i tak w nieskończoność(aż nie nastąpi przepełnienie stosu).

Musisz to dodać za pomocą pętli:

Macierz tabdod = new Macierz(3,3);
for(int i = 0; i < tabdod._wiersz; i++)
{
   for(int j = 0; j < tabdod._kolumna; j++)
   {
      tabdod.tabMacierz[i,j] = M.tabMacierz[i,j] + M2.tabMacierz[i,j];
   } 
}
return tabdod;
 
0

A no racja rozumiem już dziękuje bardzo za pomoc :)

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