Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Podwójny operator strzałki do zagnieżdzonych klas

Ostatnio zmodyfikowano 2016-04-03 07:48
Autor Wiadomość
LuK
Temat założony przez niniejszego użytkownika
Podwójny operator strzałki do zagnieżdzonych klas
» 2016-03-17 15:13:27
Są pewne problemy z ładnym wyłuskaniem tablicy dynamicznej (zmiennej obiektowej) w klasie zdefiniowanej dynamicznie:

*obiektpnt
*tablica (w obiekt)

cout << obiektpnt->tablica[ index ].x


działa poprawnie, natomiast

cout << obiektpnt->( tablica + index )->x


nie kompiluje się.

Również
cout << obiektpnt->*( tablica + index ).x

jest niekompilowalne. Miałby ktoś pomysł jak to zrobić?

Pozdrawiam
LuK
P-146133
Monika90
» 2016-03-17 15:45:16
Jeśli działa poprawnie to używaj, po co kombinować?

Jeżeli dobrze rozumiem o co Ci chodzi, to chyba o to:
C/C++
cout <<(( obiektpnt->tablica ) + index )->x;
P-146134
LuK
Temat założony przez niniejszego użytkownika
» 2016-03-19 12:45:58
Thx, działa.

Projekt oparty jest z założenia na wskaźnikach (dynamiczne przydzielanie pamięci), dlatego operatory strzałki, żeby kodowanie było spójne. Gdyby ni stąd ni zowąd i jeszcze w połowie wyrażenia pojawiła się tablica wyglądałoby to dziwnie, niespójnie. 

Po drugie, bo lubie wyzwania, a problemy są po to, aby je przezwyciężać a nie, żeby je omijać, bo nie dojdziesz tam, gdzie chesz.

Jednak jeśli chodzi o czytelność, to zapis jest taki sobie ... zagnieżdżony. Źle się czyta.

Przy okazji z operatorem dereferencji zapis wygląda tak

cout <<( *( obiektpnt->tablica ) + index ) ).x


i musi być nawias bo operator 'kropki' ma wyższy priorytet.

Pozdrawiam,
LuK

P-146197
mokrowski
» 2016-03-19 17:34:44
A w jakim celu prezentować "w czym dane są trzymane"? Masz pretensję że "widać tablicę" a tym czasem do nawigowania po kontenerach są już od '90 lat zeszłego wieku iteratory...
No ale dobrze ... rozumiem filozofię "przezwyciężania przeciwności w celach edukacyjnych". Tak więc .. tylko informuję :-)
P-146214
LuK
Temat założony przez niniejszego użytkownika
» 2016-03-21 19:01:43
Dobrze wiedzieć, że są interatory.

Na początku przewidywałem stworzenie listy, ale to byłby zbyt duży nakład kodu w porównaniu z zyskami i złożoność w porównaniu z prostym przydzielaniem zasobów dla tablicy. To przechodzenie w przód i w tył po wskaźnikach charakterystyczne dla listy... Tablica dynamiczna jest prosta i szybka.

Same interatory muszą w sobie kryć niestety równoważny listom kod, nie są więc takie lekkie.
P-146355
carlosmay
» 2016-03-21 19:34:50
Same interatory muszą w sobie kryć niestety równoważny listom kod, nie są więc takie lekkie.
Iteratory napisane są dla maksymalnej wydajności, więc używając ich piszemy kod szybszy ( zwykle nie wolniejszy od zwykłego iterowania wskaźnikami).
W połączeniu z kontenerami, dla których są zoptymalizowane, są szybkie.
P-146362
LuK
Temat założony przez niniejszego użytkownika
» 2016-03-23 02:10:39
Może tak być, bo przy dynamicznym rozszerzaniu tablicy za każdym razem trzeba kopiować starą tablicę do nowej. I to po obiektach. Ale gdyby tak rozszerzać tablicę ze skokiem kilkadziesąt obiektów, bo przy współczesnych pamięciach kilkaset bajtów jest śmieszną wielkością, to kopiowanie ograniczałoby się tylko do momentów porzeszania tablicy. I tu wynik szybkości mógłby być obiecujący.
P-146451
mokrowski
» 2016-03-23 02:36:51
No to gratuluję bo właśnie "wynalazłeś" to co robi vector już od lat 90'tych zeszłego wieku :-) W dodatku możesz zmienić klasę alokatora na własną jeśli nie podoba Ci się domyślne dynamiczne alokowanie obiektów.
Napisz lepiej że chcesz tablicę "bo tak" bo coś widzę że szybo wyczerpią się argumenty :-)
P-146452
« 1 » 2
  Strona 1 z 2 Następna strona