Tablica dynamiczna przechowywująca różne obiekty

0

Witam. Mam takie zadanko. Tworzę następujące klasy:
class Zasilanie {int napiecie, prad};
class Akumulatorowe : public virtual Zasilanie {int czas_pracy};
class Sieciowe : public virtual Zasilanie {int czestotliwosc, napiecie};
class Uniwersalne : public Akumulatorowe , public Sieciowe {};

metody nie są teraz zbyt ważne. W zadaniu chodzi o to żeby zdefiniować tablicę dynamiczną (bez użycia STL) umożliwiającą zarządzanie obiektami typów Akumulatorowe oraz Uniwersalne. Podaj przykład stworzenia (dynamicznie) oraz umieszczenia w tablicy 2 elementów różnych typów. W rozwiązaniu jest coś takiego:

Akumulatorowe *tab = new Akumulatorowe[2];

ale nie mam pojęcia szczerze jak to wykorzystać. Byłby ktoś w stanie pomóc?

0

Może w zależności od danych wejściowych, w klasie Akumulatorowe tworzysz obiekt innej klasy?

0

Nie, w klasach dokładam tylko dane typu int jak to podaje w {}; W klasie Akumulatorowe są obiekty dziedziczone z klasy Zasilanie (napiecie i prad) oraz dodatkowe pole typu int : czas_pracy.

0

Te klasy są bez sensu. Skoro "zasilanie" jest charakteryzowane przez napięcie to po co znów pojawia się ono w Sieciowe?
A wracając do pytania: polimorfizm. Możesz do wskaźnika do klasy bazowej przypisać obiekt pochodny i poprawnie wywoływać metody wirtualne.

0

Wiem, klasy są czysto teoretyczne, przypuszczam że są skonstruowane w ten sposób żeby podczas wypisywania nie było oczywiste jak wypisać poszczególne wartości napięć. Ale jak do tak zaalokowanej tablicy podstawić odpowiednie elementy? Mam konstruktory domniemane do tych klas.

1
Akumulatorowe **tab = new Akumulatorowe*[2];
tab[0] = new Akumulatorowe;
tab[1] = new Uniwersalne;
(...)
tab[0]->metoda1();
tab[1]->metoda2();

tak ?

1

Nie wiem czemu do tego celu używasz tablicy dwuwymiarowej, myślę, że tu w zupełności wystarczy wektor.

Akumulator *tab = new Akumulator[2];

tab[0] = Akumulator();
tab[1] = Uniwersalne();

Tak bym to zrobił, pozdrawiam

0

O oto mi chodziło właśnie :) To rozwiązanie bez tablicy dwuwymiarowej jest ok, tylko że w rozwiązaniach tablica była zaimplementowana jako dwuwymiarowa stąd pytanie. Dzięki wielkie :) A tak jeśli mógłbym jeszcze nadużyć waszej pracowitości, mam pytanie co do zadania z tym powiązanego. Mam taki kod:

for (unsigned numer = 0, numer < ilosc, numer++)
{
      if (tablica[numer+1] < tablica[numer])
      {
            Uniwersalne u = tablica[numer];
            tablica[numer] = tablica[numer + 1]
            tablica[numer] = u;
       }
}

Czy to będzie działać poprawnie dla tej tablicy? ilość to rozmiar tablicy. Jeśli nie to co trzeba zmienić w powyższym kodzie i definicjach klas aby elementy tablicy zostały posortowane (to jest bodajże pętla wewnętrzna sortowania bąbelkowego).

Bo nie wiem czy dobrze myślę. Operator < porównuje tam iloczyn napiecia i pradu (tego napięcia z Zasilania). Chyba coś trzeba zmienić w klasach? Zmienić ten operator na wirtualny? Bo w kodzie chyba nic nie zmieniać (przynajmniej w przypadku tego drugiego rozw. z wektorem, bo nie wiem jak przy tym z tablicą dwuwymiarową?)

Dzięki wielkie z góry ;)

0

Nie, raczej nic nie trzeba zmieniać, operator < nie musi być wirtualny

1 użytkowników online, w tym zalogowanych: 0, gości: 1