Struktura zawierająca obiekty różnych klas dziedziczących

0

Witam,

Podczas programowania pewnej aplikacji natknąłem się na pewien problem. Chodzi o to, że posiadam klasę "Produkt ubezpieczeniowy", po której dziedziczą takie jak "Dom", "Samochód", "Motor". Chciałbym stworzyć w klasie Polisa listę jednokierunkową, która zawierałaby obiekty poszczególnych klas dziedziczących po "Produkcie ubezpieczeniowym", ale jak wiadomo struktura może przechowywać obiekty tylko jednego typu (chyba). Jak w związku z tym mogę to zrobić? Myślałem o:

  1. Utworzenie kilku struktur i posiadanie kilku list (mało efektywne)
  2. Wykorzystanie unii (nie wiem czy to możliwe przy liście, nie miałem z uniami styczności)
  3. Konwersja w jakikolwiek sposób (o ile coś tu pomoże)

Proszę o podpowiedzi.

0

o_O Ale że co? Normalnie możesz przechowywać w tej liscie wskaźniki/referencje do typów pochodnych jeśli lista jest typu bazowego.

0

Nie wiem czy dobrze mnie zrozumiałeś (a może naprawdę napisałem jakąś głupotę). Chodzi mi o to, że struktura z definicji przechowuje obiekty konkretnego typu - ja chciałbym, aby stworzyć coś, co będzie mogło przechowywać obiekty różnego typu (dom, samochód, motor) w zależności od potrzeby. Na przykład pierwsze 3 elementy listy to obiekty klasy Samochód, potem motor, potem dom itd. Czy jest to możliwe?

0

Dobrze cie zrozumialem. To ty nie znasz podstaw języka w którym chcesz pisać ;]
Materiał poglądowy:

#include <iostream>
using namespace std;

class Instrument
{
protected:
    int cena;
    int wiek;
public:
    Instrument(): cena(0),wiek(0) {}
    Instrument(int c, int w): cena(c),wiek(w) {}
    virtual void graj() =0;
};

class Trabka: public Instrument
{
private:
    int waga;
public:
    Trabka(): Instrument(), waga(0) {}
    Trabka(int c, int w, int wg): Instrument(c,w), waga(wg) {}
    void graj()
    {
        cout<<"\nTrabienie na trabce wazacej "<<this->waga<<"kg kosztujacej "<<this->cena<<
            "zl majacej "<<this->wiek<<" lat\n";
    }
};

class Skrzypce: public Instrument
{
private:
    string nazwa;
public:
    Skrzypce(): Instrument(),nazwa("nieznane") {}
    Skrzypce(int c, int w, string n): Instrument(c,w), nazwa(n) {}
    void graj()
    {
        cout<<"\nSkrzypienie na skrzypcach "<<this->nazwa<<" kosztujacych "<<this->cena<<
            "zl majacych "<<this->wiek<<" lat\n";
    }
};

int main()
{
    Instrument** tablica=new Instrument*[2];
    tablica[0]=new Skrzypce(15000,150,"Stradi");
    tablica[1]=new Trabka (20000,20,5);
    tablica[0]->graj();
    tablica[1]->graj();
    return 0;
}

http://ideone.com/0ndD6

0

Wszystko jasne, dzięki :)

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