// main.cpp #include #include #include #include "tablica.hpp" using namespace std; int main() { Tablica tablica(5); // tworzy tablice piecioelementowa tablica.wypisz(); tablica.zmien_rozmiar(10); tablica.wypisz(); tablica.zmien_rozmiar(7); srand(static_cast(time(nullptr))); const unsigned rozmiar = tablica.get_rozmiar(); for(unsigned i = 0; i < rozmiar; ++i) { tablica[i] = rand() % 100; } cout << tablica << endl; tablica.zmien_rozmiar(15); cout << tablica << endl; return 0; } // tablica.hpp #include using namespace std; class Tablica { friend ostream& operator<<(ostream&, const Tablica&); private: int* dane; unsigned rozmiar; public: Tablica(); // tworzy pusty obiekt (pusta tablice) ~Tablica(); explicit Tablica(unsigned); // tworzy tablice o podanym rozmiarze void dodaj_element(int); void wypisz() const; int get_wartosc(unsigned) const; void set_wartosc(unsigned, int); unsigned get_rozmiar() const; void clear(); void zmien_rozmiar(unsigned); int& operator[](unsigned el) { return dane[el]; } }; Tablica::Tablica() : dane(nullptr), rozmiar(0) {} /* Tablica::Tablica() { dane = nullptr; rozmiar = 0; } */ Tablica::Tablica(unsigned size) : dane(new int[size]), rozmiar(size) { for(unsigned i = 0; i < size; ++i) dane[i] = 0; } void Tablica::dodaj_element(int num) { //1. int* temp = new int[rozmiar]; //2. for(unsigned i = 0; i < rozmiar; ++i) temp[i] = dane[i]; //3. delete[] dane; //4. dane = new int[rozmiar + 1]; //5. for(unsigned i = 0; i < rozmiar; ++i) { dane[i] = temp[i]; } //6. delete[] temp; //7. dane[rozmiar] = num; rozmiar++; } void Tablica::wypisz() const { for(unsigned i = 0; i < rozmiar; i++) { cout << dane[i] << " "; } cout << endl; } Tablica::~Tablica() { delete[] dane; cout << "Zniszczono tablice"; } int Tablica::get_wartosc(unsigned nr) const { return dane[nr]; } void Tablica::set_wartosc(unsigned index, int num) { dane[index] = num; } unsigned Tablica::get_rozmiar() const { return rozmiar; } void Tablica::clear() { delete[] dane; rozmiar = 0; } void Tablica::zmien_rozmiar(unsigned newSize) { if(newSize == rozmiar) return; if(newSize > rozmiar) { int* temp = new int[rozmiar]; for(unsigned i = 0; i < rozmiar; ++i) { temp[i] = dane[i]; } delete[] dane; dane = new int[newSize]; for(unsigned i = 0; i < rozmiar; ++i) { dane[i] = temp[i]; } delete[] temp; for(unsigned i = rozmiar; i < newSize; ++i) { dane[i] = 0; } rozmiar = newSize; } else { int* temp = new int[newSize]; for(unsigned i = 0; i < newSize; ++i) { temp[i] = dane[i]; } delete[] dane; dane = new int[newSize]; for(unsigned i = 0; i < newSize; ++i) { dane[i] = temp[i]; } delete[] temp; rozmiar = newSize; } } ostream& operator<<(ostream& strumien, const Tablica& obiekt) { for(unsigned i = 0; i < obiekt.rozmiar; ++i) strumien << obiekt.dane[i] << '\t'; return strumien; }