Już pomińmy logikę mojego przykładu. Chodzi mi o sam problem i celowo go tak uprościłem. Takie rozwiązanie kazał mi zastosować mój prowadzący laboratoria przy okazji realizacji projektu na zaliczenie(automat wydający napoje, ciastka, batony itp), więc coś chyba musi w tym być i na pewno chodzi tu o polimorfizm z którego nie wiem jak w tym przypadku skorzystać. W oryginale wygląda to tak, że mam klasę bazową Produkty i dziedziczące po niej klasy Slodycze i Napoje. Nie posiadają one żadnych metod, tylko atrybuty i akcesory do nich. I teraz problem, który przedstawiłem wcześniej w uproszczonej wersji. Mam mieć tablicę wskaźników typu Produkty* (póki co statyczną) przechowującą wszystko co jest aktualnie w zasobniku (produkty typu Slodycze i Napoje). Klasa napoje ma 2 atrybuty dodatkowe, do których właśnie nie mogę się dostać przez tą tablice typu Produkty*. I w sumie jestem w kropce, bo program mam już zrobiony deklarując każdy produkt osobno. Prowadzący tłumaczył się tym, że moje rozwiązanie blokuje dalszy rozwój programu, a tablice zawsze można zwiększyć. Teraz trochę kodu, konstruktor z mojego starego rozwiązania(wykomentarzowane) + nowe niedziałające rozwiązanie z tablicą (pominę akcesory):
public:
Czasobnik(void);
~Czasobnik(void);
private:
Cprodukt* produkty[5];
/*
Cslodycze* marsy; //stare rozwiazanie
Cslodycze* snikersy;
Cnapoje* tigery;
Cnapoje* cole;*/
konstruktor
Czasobnik::Czasobnik(void)
{
/*
marsy=new Cslodycze("Mars", 2, 0,1); //stare rozwiazanie
snikersy=new Cslodycze("Snickers", 2, 0,2);
tigery=new Cnapoje("Tiger","Puszka", 4, 0, 0.33,3);
cole=new Cnapoje("Coca cola", "Butelka", 2, 0, 0.5,4);*/
produkty[0]=new Cslodycze("Mars", 2, 0,1);
produkty[1]=new Cslodycze("Snickers", 2, 0,2);
produkty[2]=new Cnapoje("Tiger","Puszka", 4, 0, 0.33,3); // dodatkowo atrybuty z klasy napoje, do ktorych nie ma dostepu(pojemnosc i opakowanie)
produkty[3]=new Cnapoje("Coca cola", "Butelka", 2, 0, 0.5,4);
}
produkty[3]->GivePojemnosc() //blad