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,żetypyzwracanezwarteieks-
presywne.Załóżmy,żedlarobotachcesznapisaćnastępnąfunkcjęonazwie
get–position,któradobrzezgadł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.
Positionget–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