colobot-data/help/P/cbot/pointer.txt.bak

54 lines
2.4 KiB
Plaintext
Raw Normal View History

\b;Wska<6B>niki (dla specjalist<73>w)
CBOT u<>ywa odwo<77>a<EFBFBD> do \l;klas\u cbot\class; i \l;tablic\u cbot\array;. Ka<4B>da zmienna w rzeczywisto<74>ci zawiera odwo<77>anie do instancji. Instancja natomiast zawiera pola klasy. Wiele wska<6B>nik<69>w mo<6D>e odwo<77>ywa<77> si<73> do tej samej instancji. Wska<6B>nik \c;\l;null\u cbot\null;\n; nie odwo<77>uje si<73> do niczego. Instancj<63> mo<6D>na por<6F>wna<6E> do teczki, a wska<6B>nik do trzymaj<61>cego. Za ka<6B>dym razem gdy potrzebujemy nowej teczki, tworzymy now<6F> instancj<63> z trzymaj<61>cym. Ale teczka mo<6D>e by<62> trzymana przez wi<77>cej ni<6E> jedn<64> osob<6F>. Osoba nie trzymaj<61>ca <20>adnej teczki to wska<6B>nik na \c;\l;null\u cbot\null;\n;.
Przyk<EFBFBD>ad:
\c;\s;{
\s; MojaKlasa item1();// utw<74>rz now<6F> instancj<63>
\s; // wskazywan<61> przez item1
\s; MojaKlasa item2; // utw<74>rz wska<6B>nik null
\s; item2 = item1; // skopiuj wska<6B>nik,
\s; // item2 i item1 wskazuj<75>
\s; // teraz t<> sam<61> instancj<63>
\s; item1.a = 12; // zmodyfikuj instancj<63>
\s; // wskazywan<61> przez item1 (i item2)
\s; message(item2.a); // wy<77>wietla liczb<7A> 12
\s;}
\n;
W przypadku przekazania instancji \l;klasy\u cbot\class; jako parametru funkcji, funkcja otrzymuje wska<6B>nik do tej instancji. Oznacza to, <20>e w przypadku modyfikacji instancji wewn<77>trz funkcji, zostanie zmodyfikowana instancja podana przy wywo<77>aniu funkcji jako parametr.
\c;\s;void Test( MojaKlasa item )
\s;{
\s; item.a = 12; // zmodyfikuj oryginaln<6C> instancj<63>
\s; item = new MojaKlasa(); // nowa instancja lokalna
\s; item.a = 33; // zmodyfikuj instancj<63> lokaln<6C>
\s;}
\n;
Wywo<EFBFBD>anie funkcji \c;Test()\n;<3B>:
\c;\s;{
\s; MojaKlasa toto();
\s; Test(toto);
\s; message(toto.a); // wy<77>wietla 12
\s;}
\n;
Instancja zawieraj<61>ca pole \c;a = 33\n; jest wskazywana tylko przez nowoutworzon<6F> instancj<63> \c;item\n; wewn<77>trz funkcji \c;Test\n;. Na ko<6B>cu funkcji \c;Test\n; ta instancja wskazywana przez \c;item\n; jest automatycznie usuwana.
Funkcja mo<6D>e zwr<77>ci<63> instancj<63><6A>:
\c;\s;MojaKlasa Test2( )
\s;{
\s; MojaKlasa item = new MojaKlasa();
\s; item.x = 33;
\s; return item;
\s;}
\n;
W taki spos<6F>b nale<6C>y wywo<77>ywa<77> funkcj<63>:
\c;\s;{
\s; MojaKlasa toto;
\s; toto = Test2(); // toto b<>dzie zawiera<72> wska<6B>nik do
\s; // instancji utworzonej przez Test2()
\s; message(toto.a); // wy<77>wietla 33
\s;}
\n;
\t;Zobacz r<>wnie<69>
\c;\l;class\u cbot\class;\n;, \c;\l;new\u cbot\new;\n;
\l;Programowanie\u cbot;, \l;typy\u cbot\type; i \l;kategorie\u cbot\category;.