tablica obiektów

0

Jak sobie robię tablice obiektów w ten sposób:

CKlasa tablica[20];

to jak teraz stworzyc ten obiekt z parametrami, tak jak się to robi z pojedyńczymi obiektami. Chodzi o to jak na tablicy wykonać taką operację:

CKlasa zmienna(NULL, "hello");
0

tablica[index] = CKlasa(NULL, "hello");

0

Utworzyć CKlasa *tab[20]; Potem przejść przez całą tablice i za pomoca operatora new utworzyc obiekty.

Bądź: dokonać inicjalizacji agregatowej, pochodzącej z C;
CKlasa tab[2] = {CKlasa(0, "jeden"), CKlasa(0, "I tak dalej")};

Tak jak kolega wyżej, jest łatwiej. Tego to ja nie znałem... ciekawe...

PS: Czemu musze się zawsze spóźniać. Czemu zakładasz 3 te same tematy?

0

ale w sposobie DzieXa to cały kod będzie tak wyglądał:

CKlasa tablica[20];
tablica[0] = CKlasa(NULL, "Hello")
tablica[1] = CKlasa(NULL, "SASASA")
...

?

I jeszcze odnośnie wskaźników to czy mogę zrobić coś takiego:

delete tablica[20];

i czy wtedy będzie to tak samo jakbym niszczył wszystko po kolei?

0

Ad1. Nom będzie. Taki urok tablic. Oczywiści jeśli masz te naspisy (podawane w drugim parametrze) jakoś oddzielnie, to wystarczy w pętli to puścić.

Ad.2
Piszesz delete[] tablica;

Ale tylko gdy było alokowane przez new!

0

A co to znaczy, że była alokowana przez new?

0

Wiesz jak zaalokować dynamicznie tablicę? Jeśli nie to najpierw poczytaj jakąś książkę.

0

Nie wiem, czy wiem, ale jak mi pokażesz kod to będe wiedział czy wiem o co w inm biega ;).

0

Czyli robię tak:

int liczba = 10;
CKlasa *tablica = new CKlasa[liczba];
tablica[0] = new CKlasa(NULL, "Jeden ;D")
tablica[0] = new CKlasa(NULL, "Dwa O_o")
delete[] tablica;

?

0

Czyli robię tak:

int liczba = 10;
CKlasa *tablica = new CKlasa[liczba];
tablica[0] = new CKlasa(NULL, "Jeden ;D")
tablica[0] = new CKlasa(NULL, "Dwa O_o")
delete[] tablica;

?

0

Dokładnie. Tylko stawiaj średniki. No i pod ten sam indeks przypisujesz inne obiekty, przez co tracisz adres pierwszego z nich i co za tym idzie masz wyciek pamięci. Chyba, że są to literówki ;)

Oczywiście co do szybkości zapisania tych instrukcji to nic nie zyskujesz w porównaniu do poprzedniego zapisu, bo nadal musisz klepać wszystkie 10 elementów z palca.

0

Jezeli obiekty roznia sie tylko tymi napisami, to szybciej inicjalizowac mozesz tak:

char* napisy[] = {"Jeden"; "Dwa", "Trzy", "Cztery"};
CKlasa *tablica = new CKlasa[liczba];
for(int i = 0; i < 4; i++)
  tablica[i] = CKlasa(NULL, napisy[i]);
0

A co do tych tablic. To w czym lepsze są tablice alokowane dynamicznie od tych zwykłych?

0

Teoretycznie chyba niczym, praktycznie nie zawsze wiesz ile taka tablica ma zajmowac miejsca, np. wyliczasz/dowiadujesz sie od uzytkownika dopiero w trakcie dzialania programu.

0

a właśnie przy okazji tego tematu:
czy heap to po polsku sterta ?? Pan Grębosz nazwał to zapas pamięci. Czy ta sterta to zapas pamięci ?
no i jeszcze co do tablic dynamicznych to chyba to że dzięki temu że operujemy na niej wskaźnikiem możemy wygodnie operować czasem życia, i jest dostepna zawsze jesli mamy choc jeden wskaźnik w danym zakresie.
pzdr

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