#include <iostream.h>
#include <string.h>
class wizytowka
{
      public:
      char *nazw; char *imie;
      wizytowka(char*, char*);
      ~wizytowka();
      void wypisz();
      wizytowka operator=(const wizytowka &a);
      friend ostream& operator<<(ostream& out, wizytowka& wiz);
      void zmienN(char *);
};

wizytowka::wizytowka(char * a="", char * b="")
{
 nazw=new char[strlen(a)+1];
 strcpy(nazw,a);
 assert(nazw);
 imie=new char[strlen(b)+1];
 strcpy(imie,b);
 assert(imie);
}


void wizytowka::wypisz()
{
 cout<<nazw<<"\t"<<imie;
}


wizytowka wizytowka::operator=(const wizytowka &a)
{
           if(this==&a) return *this;
           else
           {
           delete [] nazw,
           delete [] imie;
           nazw=new char[strlen(a.nazw)+1];
           strcpy(nazw,a.nazw);
           assert(nazw);
           imie=new char[strlen(a.imie)+1];
           strcpy(imie,a.imie);
           assert(imie);
           return wizytowka(strcpy(this->nazw,a.nazw),strcpy(this->imie,a.imie));
           }
}


wizytowka::~wizytowka()
{
 delete [] nazw;
 delete [] imie;
}

ostream& operator<<(ostream& out, wizytowka& wiz )
{
         out<<wiz.nazw<<" "<<wiz.imie;
         return out;
}

void wizytowka::zmienN(char * nazwisko)
{
 delete [] nazw;
 nazw=new char[strlen(nazwisko)+1];
 strcpy(nazw,nazwisko);
 assert(nazw);
}

int main()
{
    wizytowka wiz("Kowalski","Jan");
    //wizytowka pusta();
    //wiz.wypisz();
    wizytowka b;
    cout<<wiz;
    cout<<endl<<"zmiana nazwiska:"<<endl;
    wiz.zmienN("Jakies_nazwisko");
    cout<<wiz;
    cout<<endl;
    //wiz=b;
    //b.wypisz();
    wizytowka moja,kopia;
    
    wizytowka stud("Nawrot", "Jacek");
    kopia = moja = stud = stud;
    cout <<stud <<endl<< moja <<endl<< kopia<<endl;
    stud.zmienN("Olko");
    cout <<stud <<endl<< moja <<endl<< kopia<<endl;
    system("pause");
    return 0;
}
