Jak w temacie wyrzuca mi adres na strumień wyjścia, kiedy probuje wyświetlić pola obiektów (Nie wiem jak to wytłumaczyć ale wrzucając w kompilator zobaczycie o co mi chodzi). Nie wiem dlaczego tak się dzieję , chciałem po prostu wyświetlić pola klas za pomocą funkcji wirtualnej wypisz i przeładowanego operatora wyjścia.
Jakby ktoś z was, mógłby mi wskazać, gdzie leży błąd byłbym bardzo wdzięczny.
#include <iostream>
using namespace std;
class osoba{
protected:
string* imie;
string nazwisko;
public:
osoba():imie(new string("brak ")),nazwisko("brak"){}
osoba(const string& a1,const string& a2):imie(new string(a1)),nazwisko(a2){}
osoba(const osoba& ob):imie(new string(*ob.imie)),nazwisko(ob.nazwisko){}
virtual ostream& wypisz(ostream& out){out << *imie << " " << nazwisko;}
friend ostream& operator<<(ostream& out,osoba& ob){out << ob.wypisz(out);}
virtual ~osoba(){delete imie;}
};
class student:public osoba{
string kierunek;
unsigned rok;
public:
student():osoba(){}
student(const osoba& ob):osoba(ob){}
student(const osoba& ob,const string& a1,const unsigned& a2):osoba(ob),kierunek(a1),rok(a2){}
ostream& wypisz(ostream& out){out << *imie << " " << nazwisko << " " << kierunek << " " << rok << endl;}
};
//osoba::ktory = 0;
int main()
{
const osoba o1("Jan", "Kowalski");
const osoba o2("Ewa", "Nowak");
osoba* tab[5];
tab[0] = new osoba;
tab[1] = new student;
tab[2] = new osoba("Ala", "Kot");
tab[3] = new student(o1);
tab[4] = new student(o2, "Informatyka",3);
for(int i = 0; i < 5; i++)
try
{
cout << *tab[i] << endl;
}
catch (const string& err)
{
cerr << err << endl;
}
cout << "**********" << endl;
return 0;
}