Witam, czy mógłby ktoś łopatologicznie, wytłumaczyć mi i opisać, co się dzieje w poniższym kodzie w miesjcach ktorych zaznaczylem ? Skad wiedziec kiedy tak nalezy zapisac i jak dokladnie to dziala ? Z gory dziekuje :)
#include<iostream>
using namespace std;
class adres
{
string _miasto, _kod_pocztowy, _ulica;
unsigned _nr;
public:
// konstruktor
adres (string miasto, string kod_pocztowy, string ulica, unsigned nr)
{
_miasto = miasto;
_kod_pocztowy = kod_pocztowy;
_ulica = ulica;
_nr = nr;
}
// dostêpówki
string &m(){return _miasto;}
string &kp(){return _kod_pocztowy;}
string &u(){return _ulica;}
unsigned &nr(){return _nr;}
const string &m()const {return _miasto;}
const string &kp()const {return _kod_pocztowy;}
const string &u()const {return _ulica;}
const unsigned &nr()const {return _nr;}
//operator " << "
friend ostream& operator << (ostream& out, const adres &wsk)
{
out << wsk.m() << " " << wsk.kp() << " " << wsk.u() << " " << wsk.nr();
return out;
}
adres (adres& wsk) // konstruktor kopiuj¹cy.
{
_miasto = wsk.m();
_kod_pocztowy = wsk.kp();
_ulica = wsk.u();
_nr = wsk.nr();
}
// potrzebne do pierwszego konstruktor OSOBA;
adres (const adres& wsk)
{
_miasto = wsk.m();
_kod_pocztowy = wsk.kp();
_ulica = wsk.u();
_nr = wsk.nr();
}
adres () // konstruktor domyœlny .
{
_miasto = "brak";
_kod_pocztowy = "brak";
_ulica = "brak";
_nr = 0;
}
/*
friend adres operator = ( adres &adr) // operator przypisania;
{
_miasto = adr.m();
_kod_pocztowy = adr.kp();
_ulica = adr.u();
_nr = adr.nr(); // TUTAJ PROSZE WYTLUMACZYC
} */
};
class osoba
{
string _imie, _nazwisko;
unsigned _wiek;
adres* _adr;
public:
// TUTAJ PROSZE WYTLUMACZYC
osoba (string imie, string nazwisko, unsigned wiek,const adres& wsk)
{
_imie = imie;
_nazwisko = nazwisko;
_wiek = wiek;
_adr = new adres(wsk); // TUTAJ PROSZE WYTLUMACZYC
}
adres* POKAZ_ADRES() {return _adr;}
const adres* POKAZ_ADRES() const {return _adr;}
friend ostream &operator << (ostream& out, const osoba &o)
{
out << o.i() << " " << o.n() << " " << o.w();
}
string &i(){return _imie;}
string &n(){return _nazwisko;}
unsigned &w(){return _wiek;}
const string &i()const {return _imie;}
const string &n()const {return _nazwisko;}
const unsigned &w()const {return _wiek;}
//kostrutkor domyslny
osoba ()
{
_imie = "brak";
_nazwisko = "brak";
_wiek = 0;
_adr = new adres(); // TUTAJ PROSZE WYTLUMACZYC
};
int main()
{
adres* wsk = new adres("Czestochowa", "42-200", "Dabrowskiego", 73);
cout <<"*wsk :"<< *wsk << "\n\n";
adres a1(*wsk);
delete wsk;
cout << "*wsk kopiuje do obiektu a1, usuniety zostal 'wsk'... " << "\n\n";
const adres* wsk1 = new adres("Warszawa", "00-950", "Mysliwiecka", 357);
cout << "Obiekt a1: " << a1 << "\n\n";
cout << "*wsk1: " << *wsk1 << "\n\n";
adres a2;
cout << "Obiekt a2, stworzony przez domyslny konstruktor: " << a2 << "\n\n";
a2 = a1;
cout <<"Obiekt a2, przekopioway z a1: " << a2 << "\n\n";
osoba o("Jan", "Kos", 25, *wsk1);
cout << "Obiekt o: " << o << " " << *o.POKAZ_ADRES()<<"\n\n";
cout << "teraz kopiuje o do o1..." << "\n\n\n\n";
osoba o1(o);
cout << "Obiekt o1: " << o1 << " " << *o1.POKAZ_ADRES()<<"\n\n";
o.POKAZ_ADRES()->m() = "aaaaa";
o.POKAZ_ADRES()->kp() = "aaaaa";
o.POKAZ_ADRES()->u() = "aaaaa";
o.POKAZ_ADRES()->nr() = 0;
o.i() = "xxxx";
o.n() = "xxxxxxxx";
o.w() = 100;
cout << "Zmieniony obiekt o: " << o << " " << *o.POKAZ_ADRES()<<"\n\n";
osoba o2;
cout << "Obiekt o2, przepisany z obiektu o1: " << o2 << " " << *o2.POKAZ_ADRES()<<"\n\n";
o2 = o1;
cout << "Obiekt o2: " << o2 << " " << *o2.POKAZ_ADRES()<<"\n\n";
delete wsk1;
return 0;
}