Tablica z różnymi typami obiektów

Odpowiedz Nowy wątek
2010-05-27 21:18
0

Witam,

mam prośbę.. jak stworzyć w C++ tablicę przechowującą obiekty różnych typów? Trzeba zastosować szablony? Potrzebuję tablicę 20 elementową dynamicznie inicjalizowaną określonymi obiektami. Prosiłbym o przykładową, prostą implementację.

Z góry dzięki


~Jeśli jeszcze nie zwariowałeś, tzn. że jesteś niedoinformowany...

Pozostało 580 znaków

2010-05-27 21:30
0

Tablica ze swej natury przechowuje obiekty tego samego typu.
Rozwiązania są takie:

  • dziedziczenie (jeśli te obiekty są powiązane -> są szczególnymi przypadkami czegoś)
  • unia

Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2010-05-27 22:00
0

No właśnie dziedziczenie już jest, są klasy abstrakcyjne i konkretne obiekty.
Teraz te konkretne obiekty (wywodzące się de facto z jednej klasy bazowej, ale mające po drodze rózne klasy pochodne) chcę pogrupować. Trochę poczytałem i doszedłem do wniosku, że najlepiej będzie jeśli będzie to szablon, którego parametrem będzie wskaźnik do typu bazowego. I coś takiego chciałbym zrobić (oczywiście nie wiem czy się da ;)). W szablonach jestem laikiem, chcę się po prostu nauczyć.


~Jeśli jeszcze nie zwariowałeś, tzn. że jesteś niedoinformowany...

Pozostało 580 znaków

2010-05-27 22:18
0

Chyba nie bardzo rozumiem twoj problem. Albo ty nie rozumiesz szablonów. Mała prezentacja:

#include <iostream>
using namespace std;

template <class T>
class Tablica
{
  private:
    T* tab;
  public:
    Tablica(int n)
    {
      tab = new T[n];
    }
    ~Tablica()
    {
      delete[] tab;
    }
};

int main()
{
  Tablica<int> t1(10);
  Tablica<float> t2(20);
  return 0;
}

Tutaj mogę tworzyć obiekty Tablica sparametryzowane jakimś typem.
Ty na moje oko potrzebujesz zwykłą tablicę wskaźników na klasę bazową. Przykład:

#include <iostream>
using namespace std;

class Bazowa
{
  private:
    int x;
  public:
    Bazowa():x(1) {}
    virtual void wypisz()
    {
      cout<<"bazowa "<<x<<endl;
    }
};

class Pochodna1: public Bazowa
{
  private:
    int y;
  public:
    Pochodna1():Bazowa(),y(2) {}
    virtual void wypisz()
    {
      cout<<"pochodna1 "<<y<<endl;
    }
};

class Pochodna2: public Bazowa
{
  private:
    int y;
  public:
    Pochodna2():Bazowa(),y(3) {}
    virtual void wypisz()
    {
      cout<<"pochodna2 "<<y<<endl;
    }
};

int main()
{
  Bazowa** tablica = new Bazowa*[6];
  tablica[0] = new Bazowa();
  tablica[1] = new Pochodna1();
  tablica[2] = new Pochodna2();
  tablica[3] = new Bazowa();
  tablica[4] = new Pochodna1();
  tablica[5] = new Pochodna1();
  for(int i=0;i<6;i++)
      tablica[i]->wypisz();

  for(int i=0;i<6;i++)
    delete tablica[i];
  delete[] tablica;
  return 0;
}

Więc jeszcze raz pytam: jaki dokładnie masz problem?


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2010-05-27 22:37
0

Świetna rozpiska. I rzeczywiście tablica mi w tym przypadku wystarcza, tylko ja chcę ją dodatkowo ubrać w obiekt, tak żebym miał możliwość działania na tym obiekcie przy pomocy operatorów, ale to już dam sobie radę. Szablony w ogóle niepotrzebne - powalczę z nimi w późniejszym terminie.
Dzięki!


~Jeśli jeszcze nie zwariowałeś, tzn. że jesteś niedoinformowany...

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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