Article View: pl.comp.objects
Article #4618Re: Referencje (Re: Prawda o C++)
From: Marcin 'Qrczak' Kowalczyk
Date: Thu, 21 Jan 1999 19:53
Date: Thu, 21 Jan 1999 19:53
78 lines
4723 bytes
4723 bytes
On Thu, 21 Jan 1999, Michal Mosiewicz wrote:
> > Jeśli chcemy referencje na referencje / wskaźniki na wskaźniki (a ja chcę
> > - żeby implementacja listy mogła dostać argument "gdzie podłączyć następny
> > element" - inaczej robi się sztuczne ograniczenie), to nie wystarczą
> > osobne operatory na podstawienia i porównania adresów i wartości,
>
> Tego zdania to już zupełnie nie rozumiem. Przecież żadna implementacja
> listy absolutnie nie wymaga żadnych wskaźników. Na przykład w Javie
> możesz sobie po prostu napisać:
Dysklejmer: Nie znam Javy, mam tylko szczątkowe informacje o niej.
> //Lista jednokierunkowa
> class ObiektListowy {
> ObiektListowy nastepnik;
> ....
> public ObiektListowy nastepny() {
> return nastepnik;
> }
> public ObiektListowy podlacz(ObiektListowy o) {
> ObiektListowy r = nastepnik;
> nastepnik = o;
> return r;
> }
> }
Z powyższej składni wynika, że nie da się zawrzeć jednego obiektu wewnątrz
drugiego. Można najwyżej umieścić referencję do niego. O ile następnik
mógłby być referencją albo wskaźnikiem, o tyle właściwe dane elementu
listy są w naturalny sposób częścią tego elementu, a nie są tylko do niego
podłączone.
Dla mnie to jest sztuczne ograniczenie, które na dodatek odbija się na
efektywności (dodatkowe pośrednie odwołanie do pamięci, większa zajętość
pamięci (dla wskaźnika oraz techniczne struktury sterty dla dodatkowego
obiektu)).
Z powyższej składni wynika, że operator = tworzy nową referencję, a nie
kopiuje obiektu. Czy tak samo jest dla liczb całkowitych?
* Jeśli tak, to to musi być bardzo nieefektywne. Przy każdej operacji
typu a=b+c obiekt jest niszczony i tworzony na nowo.
* Jeśli nie, to znaczy, że pewne typy wbudowane pracują na innych prawach
niż wszystkie typy definiowane przez użytkownika (AFAIK właśnie tak jest
w Javie). Dla mnie to jest nienormalne z założenia.
W każdym razie wygląda na to, że w Javie nie ma referencji, przynajmniej
dla typów definiowanych przez użytkownika. Są same wskaźniki! Tyle że tego
na oko nie widać, bo każda funkcja oczekuje tych wskaźników i wskazywane
obiekty same się zwalniają.
> Czy może być prostszy kod? Nie rozumiem zupełnie co to znaczy,
> >>argument, "gdzie podłaczyć następny element"<< ale jeśli chodzi Ci o
> to, żeby wskazywać na jakiś element listy, to nie potrzebne są żadne
> referencje na referencje, tylko po prostu referencja do tego elementu
> listy.
Nie wskazywać element, tylko wskazywać miejsce, w które należy wstawić
nowy element.
Załóżmy, że chcę zdefiniować operację przypisz, która działa jak operator
przypisania, tzn.
a.przypisz (b);
jest dokładnie równoważne
a = b;
albo drugą wersję, która jest równoważna
b = a;
W szczególności jeśli dla pierwszej wersji wcześniej było c = a (a dla
drugiej c = b), to teraz wartość c ma się nie zmienić (mam nadzieję, że
dobrze rozumiem znaczenie = w Javie, której nie znam). Jak to zrobić?
--
__("< Marcin Kowalczyk * qrczak@knm.org.pl http://kki.net.pl/qrczak/
\__/ GCS/M d- s+:-- a21 C+++>+++$ UL++>++++$ P+++ L++>++++$ E->++
^^ W++ N+++ o? K? w(---) O? M- V? PS-- PE++ Y? PGP->+ t
QRCZAK 5? X- R tv-- b+>++ DI D- G+ e>++++ h! r--%>++ y-
Technical Details
Message-ID:
<Pine.LNX.4.05.9901211903120.426-100000@qrnik.knm.org.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.nask.pl!orion.cst.tpsa.pl!news.tpnet.pl!not-for-mailReferences:
<36a27542.0@news3.ibm.net> <Pine.LNX.4.05.9901180659020.6379-100000@qrnik.knm.org.pl> <77upi3$saj$1@zeus.polsl.gliwice.pl> <Pine.LNX.4.05.9901181049150.351-100000@qrnik.knm.org.pl> <36A34000.764E7B8@interdata.com.pl> <77vjok$7aj$1@h1.uw.edu.pl> <36A361A1.69764717@interdata.com.pl> <Pine.LNX.4.05.9901182130180.542-100000@qrnik.knm.org.pl> <36a3cad2.0@news3.ibm.net> <Pine.LNX.4.05.9901210833580.9316-100000@qrnik.knm.org.pl> <36A74714.C3A7DA39@interdata.com.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.nask.pl!orion.cst.tpsa.pl!news.tpnet.pl!not-for-mail From: Marcin 'Qrczak' Kowalczyk <qrczak@knm.org.pl> Newsgroups: pl.comp.programming,pl.comp.objects Subject: Re: Referencje (Re: Prawda o C++) Organization: Klub Nieszkodliwych Manjaków Lines: 79 Message-ID: <Pine.LNX.4.05.9901211903120.426-100000@qrnik.knm.org.pl> References: <36a27542.0@news3.ibm.net> <Pine.LNX.4.05.9901180659020.6379-100000@qrnik.knm.org.pl> <77upi3$saj$1@zeus.polsl.gliwice.pl> <Pine.LNX.4.05.9901181049150.351-100000@qrnik.knm.org.pl> <36A34000.764E7B8@interdata.com.pl> <77vjok$7aj$1@h1.uw.edu.pl> <36A361A1.69764717@interdata.com.pl> <Pine.LNX.4.05.9901182130180.542-100000@qrnik.knm.org.pl> <36a3cad2.0@news3.ibm.net> <Pine.LNX.4.05.9901210833580.9316-100000@qrnik.knm.org.pl> <36A74714.C3A7DA39@interdata.com.pl> Mime-Version: 1.0 In-Reply-To: <36A74714.C3A7DA39@interdata.com.pl> Date: Thu, 21 Jan 1999 19:53:38 GMT NNTP-Posting-Host: 195.116.250.29 X-Complaints-To: abuse@tpsa.pl X-Trace: news.tpnet.pl 916948418 195.116.250.29 (Thu, 21 Jan 1999 20:53:38 MET DST) NNTP-Posting-Date: Thu, 21 Jan 1999 20:53:38 MET DST Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit