Witam.
Mam klasę Klasa_podstawowa i od tej klasy wywodzą się bezpośrednio 3 klasy pochodne.
Klasy pochodne dziedziczą wszystko w ten sam sposób od klasy podstawowej i każda z klasy pochodnej ma jakieś dodatkowe pola.
Utworzyłem strukturę 'element' przechowującą element klasy 'Klasa_podstawowa' oraz klasę 'Lista' przechowującą elementy struktury 'element'.
struct element
{
Klasa_podstawowa el;
element * next;
};
class Lista
{
element * head;
element * tail;
public:
Lista() : head(NULL), tail(NULL) {}
void dodaj(Klasa_podstawowa & elem)
{
element * temp;
temp = new element;
temp->el = elem;
temp->next = NULL;
if (!head)
head = tail = temp;
else
{
temp->next = head;
head = temp;
}
}
};
Wywołując funkcję dodaj dla argumentu Klasa_podstawowa, wszystko działa jak należy.
Wywołując funkcję dodaj i jako argument podając obiekt jednej z klas pochodnych, również nie ma błędu, na listę dodaje się obiekt, jednak dostęp jest tylko do tych elementów składowych które dziedziczy od klasy podstawowej.
Moje pytanie brzmi: Jak to wszystko skonstruować, aby wywołując funkcję dodaj() przy argumentach, którymi są obiekty klas pochodnych, dostęp był również do tych pól, które są nie odziedziczone, a utworzne dopiero na poziomie klasy pochodnej.