[poczatkujacy] odpowiednik wskaznika na tablice
Lulek - 22-11-2006 00:41
[poczatkujacy] odpowiednik wskaznika na tablice
Witam
Znów mam pytanie z serii bardzo początkujących. Wiem, że takie lubicie. ;)
Ciągle nie mogę przywyknąć do braku wskaźników w takiej postaci w jakiej je miałem w C/C++. Chyba nie zakumałem tak naprawdę jeszcze filozofii javy. :) No ale staram się i mam nadzieję, że ktoś mi pomoże. Mam taki "problem"...
Mam trzy tablice przechowujące pewne obiekty. Chcę żeby różne metody zamiennie korzystały z tych tablic ale nie chcę podawać metodom tych tablic jako argumenty. Chciałbym mieć jakiś "wskaźnik" pokazujący aktualnie używaną tablicę. Może na przykładzie będzie to bardziej zrozumiałe...
public class Obiekt { public void costam() { } };
public Obiekt obiekty1[] = new Obiekt[10]; public Obiekt obiekty2[] = new Obiekt[50]; public Obiekt obiekty3[] = new Obiekt[30];
public void metoda() { obiekty[5].costam(); }
Chcialbym zebym uzywajac tablicy "obiekty" tak naprawde uzywal czasem "obiekty1", czasem "obiekty2" i czasem "obiekty3". W zaleznosci od tego jaki wskaznik przypisze talicy "obiekty". Jest to mozliwe? Wiem, ze to moze troche nieobiektowe podejscie do sprawy i smierdzi wskaznikami ale jednak chcialbym wiedziec czy moge to jakos zrobic. Gdyby ktos byl tak mily i podszepnal slowko to bylbym wdzieczny.
Uprzedzam niektore pytania - oczywiscie "Thinking in Java" kupie i przelece dokladnie w calosci. Niestety nie w tej chwili... :)
Pozdrawiam i mam nadzieje, ze... :)
Lulek
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
nugaee - 22-11-2006 00:41
Lulek wrote: > > public class Obiekt > { > public void costam() > { > } > }; > > public Obiekt obiekty1[] = new Obiekt[10]; > public Obiekt obiekty2[] = new Obiekt[50]; > public Obiekt obiekty3[] = new Obiekt[30]; > > public void metoda() > { > obiekty[5].costam(); > } > > Chcialbym zebym uzywajac tablicy "obiekty" tak naprawde uzywal czasem > "obiekty1", czasem "obiekty2" i czasem "obiekty3". pomijajac zagadnienia poprawnosci powyzszego kodu (zakladam ze to wszystko jest w "srodku" jakies klasy i pomylily ci sie ;) public z private przy polach tej klasy ob*{1,3}
private Obiekt[] obiekty = obiekty1;
public void setObiekty(int czasem) { if(czasem == 1) { obiekty = obiekty1; return; } if(czasem == 2) { obiekty = obiekty2; return; } if(czasem == 3) { obiekty = obiekty3; return; } obiekty = obiekty1; }
Arek Margraf - 22-11-2006 00:41
Użytkownik "Lulek" <lulek074.WYTNIJ@gazeta.pl> napisał w wiadomości news:egh3pk$7hi$1@inews.gazeta.pl... > Witam > > Znów mam pytanie z serii bardzo początkujących. Wiem, że takie lubicie. ;) > > Ciągle nie mogę przywyknąć do braku wskaźników w takiej postaci w jakiej je > miałem w C/C++. Chyba nie zakumałem tak naprawdę jeszcze filozofii javy. :) > No ale staram się i mam nadzieję, że ktoś mi pomoże. Mam taki "problem"...
Mysle ze w C++ miałes problemy z referencjami albo ich nie używałes tzn tylko obiekt albo wskaźnik a nie referencja. Gdybys używał referencji to przejscie na jave było by łatwiejsze
> Chcialbym zebym uzywajac tablicy "obiekty" tak naprawde uzywal czasem > "obiekty1", czasem "obiekty2" i czasem "obiekty3". W zaleznosci od tego jaki > wskaznik przypisze talicy "obiekty". Jest to mozliwe? Wiem, ze to moze troche > nieobiektowe podejscie do sprawy i smierdzi wskaznikami ale jednak chcialbym > wiedziec czy moge to jakos zrobic. Gdyby ktos byl tak mily i podszepnal > slowko to bylbym wdzieczny. >
no w czym problem przypisujesz obiekty = obiekty1 i działasz na tablicy obiekty. Takie przypisanie to nie jest przepisanie obiektów a właśnie referencji na nie tzn jeżeli zrobisz
obiekty=obiekty2
i w obiekty 2 usuniesz wszystkie elementy (albo lepiej przypiszesz im wartość null). To w obiekty zobaczysz same wartości null gdyż przypisanie NIE JEST czyms w rodzaju operatora kopjującego to włąsnie rcazej przypomina przypisanie wskaźnika.
faktycznie - radzę - jeszcze troche o javie poczytac.
A
Lulek - 22-11-2006 00:41
> pomijajac zagadnienia poprawnosci powyzszego kodu (zakladam ze to > wszystko jest w "srodku" jakies klasy i pomylily ci sie ;) public z > private przy polach tej klasy ob*{1,3}
Tak, to co napisalem bylo (tak modnym ostatnio) "skrotem myslowym". ;) To raczej pseudokod, ktory mial tylko wyjasnic to co wyzej probowalem powiedziec po polsku.
Wielkie dzieki za pomoc i przede wszystkim wyrozumialosc. Za chwile wprowadze w zycie to co poradziles.
Lulek :)
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Lulek Cola - 22-11-2006 00:41
> Mysle ze w C++ miałes problemy z referencjami albo ich nie używałes tzn > tylko obiekt albo wskaźnik a nie referencja. Gdybys > używał referencji to przejscie na jave było by łatwiejsze
Masz racje. Nie mialem problemow z referencjami, bo ich po prostu nie uzywalem. :) To moje C++ to nie bylo tak calkiem C++. Zawsze pisalem w ANSI C, a potem jak sie przesiadlem na C++ to bylo takie C z klasami. Bardzo mi sie spodobala idea grupowania wszystkiego w klasy. To wprowadzalo fajny porzadek w zrodlach. No ale poza klasami to z dobrodziejstw C++ wlasciwie nie korzystalem. Wiem - wstyd sie przyznac ale tak bylo. :)
> no w czym problem przypisujesz obiekty = obiekty1 i działasz na tablicy > obiekty. Takie przypisanie to nie jest przepisanie > obiektów a właśnie referencji na nie tzn jeżeli zrobisz > > obiekty=obiekty2 > > i w obiekty 2 usuniesz wszystkie elementy (albo lepiej przypiszesz im > wartość null). To w obiekty zobaczysz same wartości null > gdyż przypisanie NIE JEST czyms w rodzaju operatora kopjującego to włąsnie > rcazej przypomina przypisanie wskaźnika.
Dzieki. To rzeczywiscie wydaje sie bardzo proste (i fajne) zaraz sprobuje to zrobic...
> faktycznie - radzę - jeszcze troche o javie poczytac.
Zgadzam sie w 100%. Az mi glupio, ze cos probuje pisac bez dokladnego przestudiowania "Thinking in Java". No ale sam rozumiesz - nie moglem sie doczekac... :D Na pewno poczytam to nie tylko troche. Bez tego zawsze bede mial braki i bede sie zastanawial nad sprawami oczywistymi.
Dzieki za wyrozumialosc i pomoc. Lulek
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Zbyszek Malec - 22-11-2006 00:41
Dnia Wed, 11 Oct 2006 07:41:15 +0200, Arek Margraf napisał(a):
> Mysle ze w C++ miałes problemy z referencjami albo ich nie używałes tzn tylko obiekt albo wskaźnik a nie referencja. Gdybys > używał referencji to przejscie na jave było by łatwiejsze
Nie zgodziłbym się. Referencja w javie jest czymś innym niż referencja w c++. W javie referencja jest bytem, w c++ jest to sposób przekazywania innych bytów.
-- Zbyszek Malec
nugaee - 22-11-2006 00:42
Zbyszek Malec wrote: > Dnia Wed, 11 Oct 2006 07:41:15 +0200, Arek Margraf napisał(a): > W javie referencja jest bytem, w c++ jest to sposób przekazywania > innych bytów. > moglbys to rozwinac ?
daffca - 22-11-2006 00:42
nugaee wrote: > Zbyszek Malec wrote: > >> Dnia Wed, 11 Oct 2006 07:41:15 +0200, Arek Margraf napisał(a): >> W javie referencja jest bytem, w c++ jest to sposób przekazywania >> innych bytów. >> > moglbys to rozwinac ?
kolega mial na mysli (mam nadzieje :-) ) ze w c++ referencja to palec, ktorym wskazujesz obiekt, miejsce w tablicy,
a w javie to obiekt wskazany palcem,...
poprawcie jak zle powiedzialem:)
pozdr.dfc
daffca - 22-11-2006 00:42
daffca wrote: > nugaee wrote: > >> Zbyszek Malec wrote: >> >>> Dnia Wed, 11 Oct 2006 07:41:15 +0200, Arek Margraf napisał(a): >>> W javie referencja jest bytem, w c++ jest to sposób przekazywania >>> innych bytów. >>> >> moglbys to rozwinac ? > > > kolega mial na mysli (mam nadzieje :-) ) ze w c++ referencja to palec, > ktorym wskazujesz obiekt, miejsce w tablicy,
z miejscem w tablicy to sie zagalopowalem:(
pozdr.dfc
nugaee - 22-11-2006 00:42
daffca wrote: > > kolega mial na mysli (mam nadzieje :-) ) ze w c++ referencja to palec, > ktorym wskazujesz obiekt,
problem polega na tym ze imho w javie tez ;)
Arek Margraf - 22-11-2006 00:42
Użytkownik "Zbyszek Malec" <zbyszanna@tlen.pl> napisał w wiadomości news:14h7g8a1u5vhx$.1vqbnr5h60qg1.dlg@40tude.net.. . > Dnia Wed, 11 Oct 2006 07:41:15 +0200, Arek Margraf napisał(a): > >> Mysle ze w C++ miałes problemy z referencjami albo ich nie używałes tzn tylko obiekt albo wskaźnik a nie referencja. Gdybys >> używał referencji to przejscie na jave było by łatwiejsze > > Nie zgodziłbym się. Referencja w javie jest czymś innym niż referencja w > c++. W javie referencja jest bytem, w c++ jest to sposób przekazywania > innych bytów.
Ale czy ja napisalem ze jedne i drugier referencje to jest to samo ?
LUDZIE CZYTAC UWAZNIE PROSZE
JA tylko napislaem ze znajomosc referencji w C++ ___ułatwia___ posługiwanie się referenjami w javie, a to ze referencje w Javie maja troche z referencji w C++ a troche ze wskazników w C++ a troche są oryginalne to zupelnie inne bajka.
Poza tym jakbys rozwinąl mysl :
"W javie referencja jest bytem" bo tego - przyznam się - nie rozumiem
A.
Zbyszek Malec - 22-11-2006 00:42
Dnia Mon, 16 Oct 2006 08:02:06 +0200, Arek Margraf napisał(a):
> Ale czy ja napisalem ze jedne i drugier referencje to jest to samo ? > > LUDZIE CZYTAC UWAZNIE PROSZE > > JA tylko napislaem ze znajomosc referencji w C++ ___ułatwia___ posługiwanie się referenjami w javie, a to ze referencje w Javie > maja troche z referencji w C++ a troche ze wskazników w C++ a troche są oryginalne to zupelnie inne bajka.
No i właśnie z tym się nie zgadzam. Referencja w C++ jest czymś innym niż w Javie i zachowuje się tutaj inaczej.
> Poza tym jakbys rozwinąl mysl : > > "W javie referencja jest bytem" bo tego - przyznam się - nie rozumiem
W C++ referencja to jest "przezwisko" na obiekt - zmieniając referencję zmieniasz obiekt. W C++ referencja jest tożsama z obiektem na który wskazuje. W C++ nie da się przekazać referencji, w C++ da się jedynie coś przekazać przez referencję.
A a; A b; A & ra = a; ra = b; //zmiana obiektu a
W javie referencja jest samodzielnym bytem pokazującym na jakiś obiekt. Przypisanie czegoś do referencji modyfikuje referencję a nie obiekt. W Javie przekazuje się wyłącznie referencje (jako byty), natomiast nie istnieje przekazywanie przez referencję (jako metoda przekazywania parametrów).
A a = new A(); A b = new B(); A ra = a; ra = b; //zmiana referencji
-- Zbyszek Malec
Arek Margraf - 22-11-2006 00:42
>> "W javie referencja jest bytem" bo tego - przyznam się - nie rozumiem > > W C++ referencja to jest "przezwisko" na obiekt - zmieniając referencję > zmieniasz obiekt. W C++ referencja jest tożsama z obiektem na który > wskazuje. W C++ nie da się przekazać referencji, w C++ da się jedynie coś > przekazać przez referencję. > > A a; > A b; > A & ra = a; > ra = b; //zmiana obiektu a > > W javie referencja jest samodzielnym bytem pokazującym na jakiś obiekt. > Przypisanie czegoś do referencji modyfikuje referencję a nie obiekt. W > Javie przekazuje się wyłącznie referencje (jako byty), natomiast nie > istnieje przekazywanie przez referencję (jako metoda przekazywania > parametrów). > > A a = new A(); > A b = new B(); > A ra = a; > ra = b; //zmiana referencji >
Z Powyższego można wnioskować że czym innym jest operator przypisania w C++ i w Javie a nie, że czym innym są referencje. Faktycznie W starych Java (1.5 i wiecej na razie nie uzywam - wiec sie nie wypowiadam) nie można było przedefiniować znaczenia operatora przypisania '=' ale to nie znaczy że w C++ takie a nie inne zachowanie się referencji zależy od tejże a nie od w/w operatora.
Wiec poprosze o inny przykład że "W javie referencja jest bytem". Z powyzszego to cąły czas nie wynika.
A.
Zbyszek Malec - 22-11-2006 00:42
Dnia Mon, 16 Oct 2006 12:48:51 +0200, Arek Margraf napisał(a):
> Wiec poprosze o inny przykład że "W javie referencja jest bytem". Z powyzszego to cąły czas nie wynika.
Ale ja nie wiem co tu ma wynikać. W javie referencja jest bytem, ma swoją wartość. W C++ referencja nie ma wartości, jest po prostu metodą odwołania się do jakiegoś bytu.
-- Zbyszek Malec
Arek Margraf - 22-11-2006 00:42
Użytkownik "Zbyszek Malec" <zbyszanna@tlen.pl> napisał w wiadomości news:nnre3dwjxh18.1b9s4bfwqmrp0$.dlg@40tude.net... > Dnia Mon, 16 Oct 2006 12:48:51 +0200, Arek Margraf napisał(a): > >> Wiec poprosze o inny przykład że "W javie referencja jest bytem". Z powyzszego to cąły czas nie wynika. > > Ale ja nie wiem co tu ma wynikać. W javie referencja jest bytem, ma swoją > wartość. W C++ referencja nie ma wartości, jest po prostu metodą odwołania > się do jakiegoś bytu.
No ok spróbuję poszukać w dostępnej literaturrze co to znaczy "W javie referencja jest bytem".
pozdr.
Arek M.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[ms sql] =?ISO-8859-2?Q?wy=B6wietlenie_pierwszych_5_rekord?==?ISO-8859-2?Q?=F3w_z_zapytania_=3F_odpowiednik_ROWNUM_w_o?== ?ISO-8859-2?Q?raclu_dla_MS_SQL=27a?=
=?ISO-8859-2?Q?=5BOracle=5D_Porownanie_wierszy_z_tych_?==?ISO-8859-2?Q?samych_tablic_na_2_r=F3=BFnych_schematach?=
SQL Server 2005: początkujący programista T-SQL ma problem
Liczba =?ISO-8859-2?Q?odpowiadaj=B1cych_rekord=F3w_z_drugi?==?ISO-8859-2?Q?ej_tabeli?=
[MySQL] Jak wybrac wiele elementow powiazanych z jednym elementem innej tablicy?
[oracle] =?ISO-8859-2?Q?=A3=B1czenie_dw=F3ch_tablic_=3F?=
703 zł na początek - wcale NIE najlepszy program partnerski
[MS SQL 2005 EXPRESS] Uprawnienia do pól w tablicy
[VBA] Dynamiczne tworzenie tablic w bazie MSAccess
SQL Server 2005 - początkujący: gdzie jest log?
zanotowane.pldoc.pisz.plpdf.pisz.pldirtyboys.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|