funkcije ogledali si bomo nekaj izboljsav ki jih pri funkcijah vnasa c pa tudi c z uvedbo prototipov omogocimo prevajalniku dodatno preverjanje nasih programov prototipi primer programa protype cpp oglejmo si ponazoritev prototipa v datoteki protype cpp oporaba prototipov v c je enaka kot pri ansi c prototip je omejen model bolj zapletene entitete ki jo izpopolnimo kasneje v nasem primeru je prototip funkcije v vrstici prototip podaja model vmesnika kako in s kaksnimi parametri bomo klicali napovedano funkcijo vsak klic funkcije do stuff mora imeti natancno tri parametre sicer bo prevajalnik javil napako parametri se morajo ujemati tako po stevilu kot po tipu ce prototipa funkcije ne podamo prevajalnik ne bo preverjal stevila in tipa parametrov pri klicih take funkcije zato bo morda prevod programa brez opozoril rezultati pri izvedbi programa pa bodo napacni prototip napisemo tako da preprosto kopiramo glavo funkcije na zacetek programa in ga zakljucimo s podpicjem imena spremenljivk v prototipu lahko sicer navedemo vendar jih v resnici prevajalnik ignorira kompatiblni tipi kompatibilni tipi so vsi preprosti tipi ki jih lahko medsebojno smiselno pretvarjamo tako lahko imamo nek celostevilcni parameter funkcija pa morda formalno pricakuje parameter tipa float sistem bo sam avtomatsko opravil konverzijo enako velja za spremembo iz float v char ali iz char v int ce je kot formalni parameter funkcije naveden int v klicu funkcije pa navedemo kazalec na int do konverzije ne more priti saj sta to dve popolnoma razlicni stvari podobno tudi ne bi prislo do pretvorbe neke strukture v long float polje alo morda celo v neko drugo obliko strukture saj je smiselna pretvorba nemogoca podobno velja tudi za vracani tip funkcije v nasem primeru void ki se mora ujemati z napovedanim oziroma pricakovanim tipom kako delujejo prototipi delovanje prototipov najlazje spoznamo s poskusanjem spremenimo aktualne parametre v vrstici v in poglejmoc kaj porece prevajalnik verjetno nic ker so parametri kompatibilni opozorilo o napaki pa dobimo ce spremenimo parametre na ker jih nismo navedli dovolj napaka bi tudi bila ce bi pred enega od imen spremenljivk v vsrtici dali znak s cemer bi na tem mestu navedli naslov spremenljivke tudi sprememba void v int v vrstici bi povzrocila izpis opozorila o napaki po popravku glave funkcije v vrstici tako da se bo ponovno ujemala s prototipom to opozorilo izgine zato pa ugotovimo da nam funkcija ne vraca nic kar pa prevajalniku spet ni vsec vidimo da nam prototipi pomagajo pri iskanju napak v nasih programih primer programa protype cpp poglejmo si sedaj naslednji primer v datoteki protype cpp program je podoben prejsnjemu imena spremenljivk v prototipu v vrstici so izpuscena in tako spoznamo da jih prevajalnik pravzaprav obravnava kot komentar posredovanje z referenco primer programa passref cpp program passref cpp kaze posredovanje z referenco kar pri ansi c ni mogoce referencno spremenljivko smo ze prej spoznali ta primer pa kaze njeno uporabnost posredovanje z referenco omogoca prenos spremenljivke funkciji tako da bodo njene spremembe opazne tudi v klicocem programu pri ansi c smo isto dosegli s posredovanjem kazalca na spremenljivko vendar je ta metoda bolj jasna prototip v vrstici ima sedaj pred drugo spremenljivko znak ta znak pove prevajalniku da naj to spremenljivko obravnava kot referenco na resnicno spremenljivko ki jo posreduje klicoci program v sami funkciji vrstice do uporabljamo spremenljivko in ta poa se obnasa tako kot bi uporabljali spremenljivko iz klicocega programa ne pa njeno kopijo druga spremenljivka in pa se obnasa tako kot smo navajeni pri ansi c ime in je sinonim za spremenljivko z imenom index v glavnem programu ime in pa velja za kopijo spremenljivke count glavnega programa v prototipu funkcije lahko imena spremenljivk tudi izpustimo in dobimo void fiddle int int pascalski programerji spoznajo in kot normalen parameter v klicu funkcije klican po vrednosti spremenljivko in pa obravnavamo kot spremenljivko ki ima spredaj besedico var cemur pravimo klic po referenci ob pridobivanju programerskih izkusenj spoznamo vso ucinkovitost posredovanja z referenco se posebno ce poramo funkcijam posredovati kar podatkovne strukture saj zadosca posredovanje njihovega naslova privzeti parametri primer programa default cpp program default cpp kaze uporabo privzetih default parametrov pri c prototip funkcije pove da moramo pri vsakem klicu obvezno podati prvi parameter z imenom length saj ni podana njegova privzeta default vrednost drugi parameter z imenom width pa ni obvezen pri vsakem klicu funkcije ce ga ne navedemo bo imela spremenljivka width znotraj funkcije vrednost podobno ni obvezen tretji parameter ce ga ne navedemo bo vrednost spremenljivke height v funkciji enaka v vsrtici so navedeni vsi trije parametri in to ni nic nenavadnega v vrstici manjka navedba trethega parametra zato se bo program obnasal tako kot ce bi klicali funkcijo get volume x y v vrstici manjkata celo dva parametra tako se bo program obnasal kot ce bi uporabili klic get volume x upostevati moramo nekaj pravil ce je za nek parameter v seznamu parametrov uporabljena privzeta vrednost bodo uporabljene privzete vrednosti tudi za vse naslednje parametre saj ne moremo imeti luknje v seznamu seveda mora biti za privzete vrednosti uporabljen pravi tip privzete vrednosti lahko navedemo bodisi v prototipu bodisi v glavi funkcije ne pa v obeh hkrati stilisticno je pametneje ce jih navajamo v prototipu funkcije spremenljivo stevilo argumentov primer programa varargs cpp program varargs cpp kaze primer s spremenljivim stevilom argumentov v funkcijskem klicu v nekaterih primerih si to zelimo spomnimo se na primer funckije printf ansi c resuje to z vec makroji v zaglavni datoteki stdarg h to sicer lahko uporabimo tudi v c radi pa bi poenostavili preverjanje tipa parametrov to naredi za nas zaporedje treh tock v vrstici prototip v nasem primeru zahteva da je prvi argument tipa int is morebitnih ostalih pa prevajalnik ne bo preverjal seveda lahko taka poenostavitev dovoli tvorbo nenavadne programske kode in se ji izogibajmo prekrivanje imen funkcij primer programa overload cpp program overload cpp kaze prekrivanje preobremenjevanje overloading vec imen funkcij to izgleda nenavadno vendar je kljucnega pomena za objektno usmerjeno programiranje imamo tri funkcije z enakim imenom katera funkcija bo torej poklicana ob izvedbi klica do stuff klicana bo funkcija pri kateri se z dejanskimi parametri ujemata tako stevilo kot tudi tip formalnih parametrov ce je v klicu do stuff navedeno kot parameter le eno celo stevilo bo klicana funkcija ki zacne v vrstici ce je naveden en sam aktualni parameter tipa float bo klicana funkcija z zacetkom v vrstici ce navedemo dva parametra tipa float klicemo funkcijo v vrstici na izbiro prekrivane funkcije vpliva le stevilo in tip formalnih parametrov ne pa tip vracanega rezultata funkcije kljucna beseda overload vrstica ni obvezujoca napove pa naso namero definiranja vec prekrivanih funkcij z imenom do stufft pri novejsih programih jo obicajno opuscamo katera od prekritih funkcij bo uporabljena doloci ze prevajalnik zato program v zasu izvajanja ni nic upocasnjen kazalo enkapsulacija