[C++] Tworzenie dynamicznego obiektu

0

Witam,

Mam taki problem.
Mam 2 klasy:

class tabela
{
  int liczba_wierszy ;
  kolumna *wsk_kolumna ;
public:
  tabela() ;
};

tabela::tabela()
{
  wsk_kolumna = new kolumna(liczba_wierszy)[10] ;
}


class kolumna
{
public:
  kolumna() ;
  kolumna(int l_wierszy) ;
};

Niestety powyższy kod nie kompiluje mi się.
Chodzi mi o to aby podczas tworzenia obiektu typu tabela tworzyło się np 10 obiektów typu kolumna (aby został wywołany konstruktor z argumentem z klasy kolumna a nie konstruktor domyślny).

Z góry dzięki za pomoc. :)

0

Jak deklarujesz klase albo strukture to musisz dac srednik po nawiasach ostrych:

class nazwa {
 ...
};    // srednik

Co do drugiego to skad metoda tabela ma wiedziec o istnieniu klasy kolumna skoro pozniej zadeklarowales klase kolumna ?

0

kod, który wkleiłem jest tylko przykładowy...całość mam oczywiście w osobnych plikach i w każdym pliku włączane są inne pliki więc klasy wiedzą o swoim istnieniu.

Chodzi mi tylko o samą ideę jak takie coś zrobić ? bo np komenda:

wsk_kolumna = new kolumna[10] ;

działa jednak ja chcę wywołać konstruktor z argumentem z klasy kolumna a nie domyślny...;/

0

trzy słowa: nie da sie.

inicjalizacja tabeli dynamicznej JEDYNIE jest w stanie odpalic konstruktory domyslne, musisz zastosowac jedno z:

  • albo +1LoI, czyli jeden level of indirection wiecej, czyli zamiast tablicy obiektow - tablica wskazniki na obiekty, i konstruowac potem obiekty przez new i wskazniki wsadzac do tablicy:
obiekt** tab = new (obiekt*)[...]; // pusta tab wskaznikow
for(i=0,....) tab[i]=new obiekt(a,b,c) // init
  • albo wasted default instance, czyli niech ctor() robi nic albo niech tylko zeruje pola, a potem robisz ekstra petle, w ktorej nadpisujesz obiekty w tablicy wlasciwymi poprzez copyctor
obiekt* tab = new obiekt[...]; // tablica defaultowych obiektow
for(i=0,....) tab[i]=obiekt(a,b,c) // nadapisanie kazdego nowym, wlasciwym
  • albo 2-phase construction, czyli niech ctor() robi nic albo niech tylko zeruje pola, a potem jakas metoda, np init(a,b,c) niech konczy konstrukcje:
obiekt* tab = new obiekt[...]; // tablica defaultowych obiektow
for(i=0,....) tab[i].init(a,b,c) // "doinicjalizowanie" kazdego po kolei
  • albo in-place factories (np sa w ->boost), czyli pomeczyc sie troche, aby w pewien magiczny sposob faktycznie wywolac ctor parametrowy na miejscu i-tego indeksu w tablicy, BEZ wstepnego konstruowania "pustego" obiektu poprzez ctor(), przykladu z lenistwa nie podam
0

Ok, zastosowałem pierwszą metodę i działa.
Dzięki wielkie :)

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