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");
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");
tablica[index] = CKlasa(NULL, "hello");
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?
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?
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!
A co to znaczy, że była alokowana przez new?
Wiesz jak zaalokować dynamicznie tablicę? Jeśli nie to najpierw poczytaj jakąś książkę.
Nie wiem, czy wiem, ale jak mi pokażesz kod to będe wiedział czy wiem o co w inm biega ;).
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;
?
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;
?
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.
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]);
A co do tych tablic. To w czym lepsze są tablice alokowane dynamicznie od tych zwykłych?
Teoretycznie chyba niczym, praktycznie nie zawsze wiesz ile taka tablica ma zajmowac miejsca, np. wyliczasz/dowiadujesz sie od uzytkownika dopiero w trakcie dzialania programu.
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