#include #include #include using namespace std; class Osoba { string imie; int tel; public: Osoba () {imie = "NN" ; tel = 0; } Osoba (string _i) {imie = _i ; tel = 0; } Osoba (string _i, int _t) {imie = _i ; tel = _t; } Osoba (const Osoba& _O) {imie = _O.imie ; tel = _O.tel; } void ustawImie (string _i = "NN") { imie = _i; } void ustawTel (int _t = 0 ) { tel = _t; } string podajImie () { return imie; } int podajTel () { return tel ; } bool operator== (Osoba& _O2); bool operator< (Osoba& _O2); void Wypisz (); }; bool Osoba::operator== (Osoba& _O2) { return ( imie.compare (_O2.imie) == 0 && tel == _O2.tel ) ? true : false; } bool Osoba::operator< (Osoba& _O2) { return ( imie.compare (_O2.imie) < 0 ) ? true : false; } void Osoba::Wypisz () { cout << "| " << setw(10) << left << imie << " : " << tel << endl; } class Notes { Osoba* Tab; int size = 0; int capacity = 3; void Extend (); public: Notes () { } Notes (Osoba* _Tab, int _size); Notes (Osoba); Notes (Notes& _N); ~Notes (); Notes& operator+= (Osoba _Os ); Notes& operator+= (Notes& _N2); Notes& operator-= (Osoba& _Os); void Wypisz (); Notes& SortAlfa (); }; Notes::Notes (Osoba* _Tab, int _size) { size = _size; capacity = max (3, size * 2) ; Tab = new Osoba [capacity] ; for (int i = 0; i < size; i++) Tab[i] = _Tab[i] ; } Notes::Notes (Osoba _Os) { Tab[0] = _Os ; size = 1 ; } Notes::Notes (Notes& _N) { size = _N.size ; capacity = max ( 3 , _N.capacity ) ; Tab = new Osoba [capacity] ; for (int i = 0; i < size; i++) { Tab[i] = _N.Tab[i] ; } } Notes::~Notes () { delete[] Tab ; } Notes& Notes::operator+= (Osoba _Os) { if (size == capacity) Extend() ; Tab[size] = _Os; size++; return *this ; } Notes& Notes::operator+= (Notes& _N2) { while (size + _N2.size >= capacity) Extend() ; for (int i = 0; i < _N2.size ; i++) Tab[ size+i ] = _N2.Tab[ i ] ; size += _N2.size ; return *this ; } Notes& Notes::operator-= (Osoba& _Os) { for (int i = 0; i < size; i++) { if ( Tab[i] == _Os ) { for (int j = i; j < size; j++) Tab[j] = Tab[j+1] ; size--; break; } } return *this; } void Notes::Extend () { capacity *= 2 ; Osoba* NewTab = new Osoba [capacity] ; for (int i = 0; i < size; i++) NewTab[i] = Tab[i] ; delete[] Tab ; Tab = NewTab ; } void Notes::Wypisz () { cout << "[ Notes ma " << size << " osob. Capacity = " << capacity << " ]\n"; for (int i = 0; i < size; i++) Tab[i].Wypisz(); } Notes& Notes::SortAlfa () { for (int read = 0; read < size; read++) { bool swapped = false; for (int i = 0; i < size - 1 - read; i++) { if ( Tab[i+1] < Tab[i] ) { swap ( Tab[i] , Tab[i+1] ); swapped = true; } } if (swapped == false) break; } return *this; } int main () { Osoba O1 ("Natalia", 321654), O2 ("Janek" , 654321), O3 ("Anna" , 123456), O4 ("Staszek", 456123), O5 ("Rafal" , 543210), O6 ("Agata" , 432105) ; O1.Wypisz(); Osoba Osoby1[] = { O1 } ; Osoba Osoby2[] = { O1, O2, O3, O4 }; Notes N1 ( Osoby1, sizeof(Osoby1) / sizeof(Osoba) ) ; N1.Wypisz (); N1 += O2 ; N1.Wypisz (); N1 += O3 ; N1.Wypisz (); N1 += O4 ; N1.Wypisz (); Notes N2 ( Osoby2, sizeof(Osoby2) / sizeof(Osoba) ) ; N2.Wypisz (); N1 += N2 ; N1.Wypisz (); N1 -= O3; N1.Wypisz (); N1.SortAlfa() ; N1.Wypisz(); }