Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- /**
- Konstruktor kopiujący ma za zadanie stworzyć nowy obiekt na podstawie istniejącego służy do powielania obiektów, co może być kosztowna operacja w przypadku dużych obiektów,
- a jest nie pożądane, przy kopiowaniu obiektów tymczasowych które za chwile i tak maja zostać zniszczone.
- Z pomoca przychodzi konstruktor przenoszący którego zadaniem jest stworzenie nowego obiektu poprzez przeniesienie lub mozna powiedzieć przypisanie danych
- z istniejącego obiektu do nowo utworzonego, bez operacji kopiowania oraz zneutralizowanie starego wzkaźnika obiektu na podstawie
- którego stwożył nowy obiekt, dzięki czemu operacja kopiowania nie zabiera zasobów pamięci co optymalizuje program.
- */
- using namespace std;
- class ZlyRozmiar{public: void komunikat(){cout<<"Niezgodnosc rozmiarow macierzy";}};
- class ZlyAdresKomorki{public: void komunikat(){cout<<"Zly adres komorki";}};
- class BladWprowadzania{public: void komunikat(){cout<<"Wprowadzono zla wartosc";}};
- class Macierz
- {
- int ** komorka;
- int wiersze;
- int kolumny;
- //Getery i settery
- public:
- int** daj_adres_komorki()//funkcja zwracajaca adres wskaznika komorka
- {
- return this->komorka;
- }
- int daj_kolumne()//getter zwracajacy liczbe kolumn
- {
- return this->kolumny;
- }
- int daj_wiersze()//getter zwracajacy liczbe wierszy
- {
- return this->wiersze;
- }
- int dajWartoscElementu(int kolumna, int wiersz)//getter zwracajacy wartość elementu o wspolrzednych [kolumna][wiersz]
- {
- if(kolumna>0 && kolumna<this->kolumny && wiersz>0 && wiersz<this->wiersze)
- {
- return this->komorka[kolumna][wiersz];
- }
- else
- {
- throw ZlyAdresKomorki();
- }
- }
- void ustawWartoscElementu(int wartosc, int kolumna, int wiersz)//setter ustawiajacy wartość elementu o wspolrzednych[kolumna][wiersz] na wartość równej wartosc
- {
- this->komorka[kolumna][wiersz]=wartosc;
- }
- Macierz& dodajMacierz(const Macierz & dodawana)//funkcja dodająca macierz przekazywanej w parametrze do macierzy obiektu
- {
- if (this->wiersze == dodawana.wiersze && this->kolumny == dodawana.kolumny)//sprawdzanie moznosci dodawania macierzy
- {
- for (int i=0;i<this->kolumny;i++)
- {
- for (int j=0;j<this->wiersze;j++)
- {
- this->komorka[i][j]+=dodawana.komorka[i][j];
- }
- }
- }
- else
- {
- throw new ZlyRozmiar();
- }
- return *this;
- }
- Macierz& pomnozPrzezSkalar(int skalar)//funkcja mnożąca macierz obiektu przez skalar
- {
- for (int i=0;i<this->kolumny;i++)
- {
- for (int j=0;j<this->wiersze;j++)
- {
- this->komorka[i][j]*=skalar;
- }
- }
- return *this;
- }
- Macierz pomnozPrzezMacierz(const Macierz & mnoznik)//funkcja mnożąca macierz obiektu przez macierz
- {
- Macierz nowa = Macierz(mnoznik.kolumny,this->wiersze);
- if (this->kolumny==mnoznik.wiersze)
- {
- for(int i=0;i<nowa.kolumny;i++)
- {
- for(int j=0;j<nowa.wiersze;j++)
- {
- int suma=0;
- for (int k=0;k<this->kolumny;k++)
- {
- suma+=this->komorka[k][j]*mnoznik.komorka[i][k];
- }
- nowa.komorka[i][j]=suma;
- }
- }
- }
- else
- {
- throw new ZlyRozmiar();
- }
- return nowa;
- }
- void wyswietlMacierz()//funkcja wyświetlająca macierz
- {
- cout<<endl;
- for (int i=0;i<this->wiersze;i++)
- {
- for(int j=0;j<this->kolumny;j++)
- {
- cout<<"["<<this->komorka[j][i]<<"]";
- }
- cout<<"\n";
- }
- }
- void wypelnijMacierz()//funkcja wypełniająca macierz
- {
- for (int i=0;i<this->wiersze;i++)
- {
- for(int j=0;j<this->kolumny;j++)
- {
- if(cin.good())
- {
- cout<<"Element ["<<j+1<<"]["<<i+1<<"]: ";
- cin>>this->komorka[j][i];
- }
- else
- {
- cin.sync();
- cin.clear();
- throw BladWprowadzania();
- }
- }
- }
- }
- Macierz(int kolumny,int wiersze)//konstruktor z dynamiczną alokacja pamięci przyjmujący w parametrach rozmiary macierzy
- {
- this->kolumny = kolumny;
- this->wiersze = wiersze;
- this->komorka = new int * [kolumny];
- for (int i=0;i<kolumny;i++)
- {
- this->komorka[i] = new int[wiersze];
- }
- }
- Macierz(const Macierz & kopiowana)//konstruktor kopiujacy
- {
- this->kolumny=kopiowana.kolumny;
- this->wiersze=kopiowana.wiersze;
- this->komorka = new int * [kopiowana.kolumny];
- for (int i=0;i<kolumny;i++)
- {
- this->komorka[i] = new int[kopiowana.wiersze];
- }
- for(int i=0;i<kopiowana.kolumny;i++)
- {
- for(int j=0;j<kopiowana.wiersze;j++)
- {
- this->komorka[i][j]=kopiowana.komorka[i][j];
- }
- }
- }
- Macierz(Macierz && przenoszona) //konstruktor przenoszacy
- {
- this->komorka=przenoszona.komorka;
- przenoszona.komorka = NULL;
- this->kolumny = przenoszona.kolumny;
- this->wiersze = przenoszona.wiersze;
- przenoszona.kolumny=0;
- przenoszona.wiersze=0;
- }
- ~Macierz()//destruktor
- {
- for(int i =0;i<this->kolumny;i++)
- {
- delete[] this->komorka[i];
- }
- delete[] this->komorka;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement