Witam wszystkich.
Mam napisać implementacje listy jednokierunkowej(Sala_kinowa).
Lista ma przechowywać wskaźniki na obiekty dziedziczące po klasie abstrakcyjnej Osoba tj.(student,doktor itp), okrojenie danych składowych jest dozwolone gdyż potem mam wyświetlić tylko ich imiona.
Mam napisać funkcje dodaj(Osoba & o).
Zaimplementowałem ją tak(na razie nie jest kompletna):
class Sala_kinowa
{
private:
int ilosc_elem;
public:
friend struct elem;
struct elem
{
elem() : data(NULL) , nast(NULL) {}
Osoba * data;
elem * nast;
} * head;
Sala_kinowa()
{
head = NULL;
ilosc_elem = 0;
}
void Sala_kinowa::Dodaj(const Osoba &data)
{
if(ilosc_elem == 0)
{
head = new elem;
osobaToElem(head,data);
++ilosc_elem;
}
// dokonczyc gdy nie pusta
}
void osobaToElem(elem * const e , const Osoba & o) // przypisuje wybrane dane z osoby do danych w elemencie
{
e->data->imie = o.imie;
e->data->kolor_oczu = o.kolor_oczu;
e->data->nazwisko = o.nazwisko;
}
};
class Osoba
{
protected:
Kolor kolor_oczu;
TString imie;
TString nazwisko;
public:
Osoba(void);
Osoba(Kolor k ,TString i, TString n) : kolor_oczu(k),imie(i), nazwisko(n) { }
Osoba(Osoba& o);
virtual ~Osoba(void) = 0;
virtual void print() {}
bool czyTenTyp(TString);
Osoba & operator =(Osoba & o);
operator TString();
friend std::ostream& operator<<(std::ostream & os ,Osoba & O);
friend std::istream& operator>>(std::istream & is ,Osoba & O);
friend class Sala_kinowa;;
};
Problem jest tego typu ze kiedy tworze nowy element(elem) tworzy mi się wskaźnik na klasę abstrakcyjna Osoba lecz nie mogę stworzyć obiektu Osoba więc nie wywołują mi się konstruktory składowych elementów i program w funkcji osobaToElem się sypie bo nie ma mi gdzie przypisać danych.
Natomiast nie mogę w strukturze elem stworzyć obiektu Osoba bo jest abstrakcyjny.
Podsumowując nie wiem jak przygotować strukture element żeby była gotowa na przypisanie do składowej data danych obiektu dziedziczącego po Osobie. Jak sobie przygotować na nie miejsce.
Pozdrawiam i z góry dziękuje za pomoc