Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
Tafunkcjajestznaczniebardziejprzejrzysta.Nieistniejejużżadnadwu-
znacznośćzwiązanazużywanymiprzezniąparametrami.Dopókimaszpo-
prawniezdefiniowanąstrukturęPosition,wieszdokładnie,wjakisposób
możeszwywołaćfunkcjęnavigate–to.Martwieniesięojednostki,konwersje
itd.jestterazobowiązkiemprogramisty,którystworzyklasęPosition.
PodobnąprzejrzystośćmożeszosiągnąćwwersjachC99iC++11zapo-
mocąwskaźnikaconst,aletoC++sprawia,żetypyzwracanesązwarteieks-
presywne.Załóżmy,żedlarobotachcesznapisaćnastępnąfunkcjęonazwie
get–position,która–dobrzezgadłeś!–odczytujejegopozycję.WjęzykuC
maszdwiemożliwości,jakpokazanonalistingu17.
Position*get–position();❶
voidget–position(Position*p);❷
Listing17.InterfejsAPIwstyluCsłużącydozwracaniatypuzdefniowanegoprzez
użytkownika
Wprzypadkupierwszejopcjifunkcjawywołującajestodpowiedzialna
zausunięciezwracanejwartości❶,któraprawdopodobniezostałaprzydzie-
lonadynamicznie(chociażnapodstawiekoduniemożemytegostwierdzić
zpewnością).Wdrugiejopcjifunkcjawywołującamusiprzydzielićpamięć
dlastrukturyPosition,którąpowinnaprzekazaćdoget–position❷.Topo-
dejściejestbardziejzbliżonedotypowegostyluC,alenaprzeszkodziestaje
samjęzyk:chcesztylkoodczytaćobiektPosition,aledodatkowomusiszzadbać
oto,byfunkcjawywołującalubwywoływanabyłaodpowiedzialnazaprzy-
dzielanieizwalnianiepamięci.JęzykC++pozwalawzwięzłysposóbzwracać
bezpośredniozfunkcjitypyzdefiniowaneprzezużytkownika,jakpokazano
nalistingu18.
Position❶get–position(){
--cięcie--
}
voidnavigate(){
autop:get–position();❷
//zmiennąpmożnaodrazuużywać
--cięcie--
}
Listing18.Zwracanieprzezwartośćtypuzdefniowanegoprzezużytkownika
wjęzykuC
++
Ponieważget–positionzwracawartość❶,kompilatormożepominąćtworze-
niekopii,więcprogramdziałatak,jakbyśbezpośredniostworzyłautomatyczną
zmiennąPosition❷.Niepojawiasiężadennarzutwczasiewykonania.Funk-
cjonalnieodpowiadatobliskostylowijęzykaC,wktórymnastępujeprzekazy-
wanieprzezreferencję,copokazanonalistingu17.
BibliotekastandardowaC
++
BibliotekastandardowaC++(stdlib)sprawia,żedlaniejsamejwartopozo-
stawićjęzykCizacząćużywaćC++.Zawieraonawysokiejjakościkodgene-
WstępdlaprogramistówC
xlix