Content deleted Content added
No edit summary
Rreshti 1:
 
[[/Shembuj]]<br>
Në fillim të ndjekjes së mësimeve të një gjuhe të huajë njeriu ballafaqohet me fjalë e tinguj që nuk mund të i kuptojë e lëre më të i shpjegojë. Për këtë ai i pranon disa nga fjalët të cilat zakonisht 'bien në vesh' më shpeshë dhe në bazë të tyre vazhdonë nxënjen e fjalëve të reja. Si do që të jetë, në ditët tona për mësimin e gjuhëve të huaja, përdorim libra nga të cilat nxjerrim këshilla dhe udhëzime për cilat fjalë duhet të kemi më shumë kujdes dhe cilat mund të i panojmë ashtu pa ju ditur kuptimin e potë të tyre.
 
Rreshti 5:
 
Nga shkolla jemi të kalitur që shpjegimet për disa gjëra të komplikuara të i pranojmë ashtu si na jepë mësuesi. Gjërat e koplikuara shpjegohen nga mësuesi duke ju përshtatur nivelit të njohurive të nxënsit (plot fjalë mbesin të pashpjeguara). Gjithë e dimë shpjegimin e mësuesit në klasën e parë: 1-2=nuk bënë, më vonë mësojmë se kjo bënë. Për këtë, mos lejo që terminologjit e reja për ty, që përdoren në gjuhët programuese të turbullojnë njohurit nga shkolla. Shpesh ndodhë që edhe vete ç'piksit e terminologjive ende nuk e kanë të qartë funksionin e përkufizimit që kanë dhënë.
----
 
*[[/Shembuj]]<br>
==Le të fillojmë shikimin e shembujve==
*Kapitulli I - [[C++/Shembuj/Kapitulli/1#Shembulli 1I|Le Komentimi i rradhëve|Shembulli 01fillojmë Komentimishikimin ie rradhëveshembujve]]
Në shumë raste, gjatë mësmit të gjuhëve të reja duhet menduar në thënjen "Ec, vetë, po mos u ndal ec, se koha e sjellë vetë"
===Komentet===
{|width=200px align=right
|-bgcolor=#aaaaaa
|Terme nga programimi
|-bgcolor=#999999
|
*[[Pogramimi/K#komenti|komenti]]
*[[Pogramimi/S#skena|skena]]
*[[Pogramimi/A#akti|akti]]
*[[Pogramimi/Y#ylli|ylli]]
*[[Pogramimi/Rr#rradha|rradha]]
*[[Pogramimi/Rr#rreshti|rreshti]]
*[[Pogramimi/K#kodi|kodi]]
*[[Pogramimi/K#kodi burues|kodi burues]]
*[[Pogramimi/E#emri|emri]]
*[[Pogramimi/V#viza e pjerrtë|viza e pjerrtë]]
*[[Pogramimi/N#ndyrshorja|ndyrshorja]]
*[[Pogramimi/V#variabla|variabla]]
|}
Komentimi i një loje nga komentatori bëhet sipas disa rregullave. Po ashtu edhe në gjuhët programuese, bëhet komentimi i kodit burues të programit. Komentohen rradhët, skenat apo akte të tëra të programit. Në C++ komentet shkruhen duke filluar me viza të pjerrta <code>//</code>, fundi i rreshtit është fundi i komentit. Po ashtu është i mundëshem edhe shënimi me rregullen e yllit. Shembuj të komenteve janë dhënë në rreshtat. Komente futen diku në mbetje të rreshtit të kodit. Shpeshë duke gjetur emra të përshtatëshem për variablat, metodat e elemetet tjera, komenimi bëhet i panevojshëm.
{|
|<pre>
11
12
13
14
15
16
17</pre>
|<pre>
const int START = 3; // Vlera e START-it nuk mund të dryshohet
const int STOP = 9; // Vlera e STOP-it nuk mund të ndryshohet
volatile int MES = 6; /* Vlera e MES-it mund të ndryshohet
nga diçka që është jashtë këtij
Programi. */
 
int index; /* Një variabël normale në C */
</pre>
|}
 
===Fjalët const dhe volatile===
{|width=200px align=right
|-bgcolor=#aaaaaa
|Terme nga programimi
|-bgcolor=#999999
|
*[[Pogramimi/C#const|const]]
*[[Pogramimi/K#konstantja|konstantja]]
*[[Pogramimi/P#programuesi|programuesi]]
*[[Pogramimi/T#tipi|tipi]]
*[[Pogramimi/Ll#lloji|lloji]]
*[[Pogramimi/T#typ|typ]]
*[[Pogramimi/I#int|int]]
*[[Pogramimi/I#inicializimi|inicializimi]]
*[[Pogramimi/M#makina përkthayese|makina përkthyese]]
*[[Pogramimi/K#kompiluesi|kompilusi]]
*[[Pogramimi/P#përkufizimi|përkufizimi]]
*[[Pogramimi/K#kompilimi|kompilimi]]
*[[Pogramimi/G#gabimi|gabimi]]
*[[Pogramimi/K#kapgabimi|kapgabimi]]
*[[Pogramimi/F#funksioni|funksioni]]
*[[Pogramimi/V#volatile|volatile]]
*[[Pogramimi/P#prototipi|prototipi]]
*[[Pogramimi/V#vlera|vlera]]
*[[Pogramimi/H#hartware|hardware]]
*[[Pogramimi/P#pjesa mekanike|pjesa mekanike]]
*[[Pogramimi/M#mënyra|mënyra]]
*[[Pogramimi/M#metoda|metoda]]
*[[Pogramimi/N#nxitimi|nxitimi]]
*[[Pogramimi/S#startimi|startimi]]
*[[Pogramimi/F#fillimi|fillimi]]
*[[Pogramimi/M#makina|makina]]
|}
Fjala <code>const</code> përdoret si para fjalë për përkufizimin e një fjale tjeter me vlerë konstante, nga ana e programuesit. Në rreshtin [[C++/Shembuj/Kapitulli/1#Shembulli 1 Komentimi i rradhëve|9]] kjo konstante është e tipit <code>int</code>, emri i saj është <code>START</code> dhe inicializohet me vleren 3. Makina përkthyese në gjuhen e makinës nga programuesit e quajtur kompajler, nuk lejon ndryshimin e vlerës së kësaj konstante, pa marr parasyshë është ndryshim me apo pa qëllim. Sepse fjala <code>START</code>është përkufizuar si konstante d.m.th e pa ndryshueshme. Po të jetë emërtuar në program ndonjë variabël/ndryshore me <code>STARTS</code> nuk do të ishte e mundshme të ngatrrohet me konstantet <code>START</code>, pasi që kompiluesi ngatërrimin e bërë do ta lajmëronte si gabim. Për këtë duhet mbajtur mend se konstantet duhet të incializohen me vlera kuptimplota. Përmisimi i më vonëshem në program i vlerave të konstanteve nuk pranohet.
{|
|<pre>9</pre>
|<pre>
const int START = 3; // Vlera e START-it nuk mund të ndryshohet
</pre>
|}
Me siguri e ke vërejtur se fjala <code>const</code> përdoret edhe më poshtë në rreshtin 23, në krye të funksionit. Aty është plasuar me qëllim që të tregohet se vlera formale e parametrit brenda fumksionit është konstante. Çdo tentim që kësaj variable të i japim vlera të reja do të shkaktojë përgjegje për gabim në kod nga ana makines. Gabimet e lajmëruara nga makina të ndihmojnë dukshëm për përmirësimin e njohurive.
{|
|<pre>23</pre>
|<pre>
void shtype(const int Vlera)
</pre>
|}
Fjala <code>volatile</code> përdoret si parafjalë për përkufizimin e një fjale tjeter që mund të merr vlera të ndryshme, pra parafjalë për përkufizimin e variablave. Variablat e përkufizuara me këtë parafjalë kanë veti të tillë që vlerat e tyre mund të ndryshohen në dy mënyra: nga jashtë dhe brenda. Kjo do të thotë se vlerat e tyre mund të ndryshohen në kodin e programit nga programuesi (nga breda) apo nga ndonjë burim tjetër p.sh pas nxitimit të programit nga përdoruesi (nga jashtë). Përdorimi i kësaj parafjale për përkufizimin e variablave bëhet me qëllim përsoshmërie të kodit ashtu që kompiluesi të njoftohet se variabla e tillë mund të pësoj ndryshimet në dy mënyrat e përmendura. Studimi i rrjedhës së kodit në kompilues është tejet interesant, mirëpo e kalonë qëllimin tonë këtu. Me këtë parafjalë mund të përufizohet edhe një konstante, çka d.m.th se ti nuk mund të ndryshoshë vleren e një variable, mirëpo mund të ndryshoshë funksionin e pjesëve mekanike (Hardware). Si do që të jetë për fillim mjaftonë kufizimi i kuptimit si më lartë.
 
Fjalë komanda për dalje (shpalosje në skenë) në rreshtin 25 në këtë moment për ne nuk është interesante. Kësaj fjalë komande do t'i kushtojmë më tepër kohë më vonë.
{|
|<pre>25</pre>
|<pre>
std::cout << "Vlera e Index-it " << Vlera << "\n";;
</pre>
|}
Nëse ke përvojë me programim atëher do të bie në sy rreshti 5 dhe 23. Aty është paraqitur përdorimi i prototipeve dhe përkufizimi i ri i funksioneve. Përdorimi i prototipeve në C nuk është domosdo i paraparë (mirëpo i mirëseardhur) ndërsa në C++, përdorimi i tyre nuk mund të tejkalohet. Për më shumë rreth prototipeve kemi në kapitullin e katërt.
{|
|<pre>
5
:
23
</pre>
|<pre>
void shtype(const int Vlera);
:
void shtype(const int Vlera)
</pre>
|}
 
Është e udhës që kodin e shkruar nga [[C++/Shembuj/Kapitulli/1#Shembulli 1 Komentimi i rradhëve|ky shembull]] ta dorzoshë tek kompiluesi dhe të nxitosh kompilimin e tij në program të mirëfillt. Në këtë mënyrë mund krahasonë rezulltatet e programit me rezulltatet e paraqitura në komentet e shembullit. Një nga shkaqet kryesore të kompilimit është nxjerrja e vlersimit se punon si duhet kompiluesi yt.
 
===Operatori për zona të vlershmërisë===
{|width=200px align=right
|-bgcolor=#aaaaaa
|Shprehje të shfrytëzuara
|-bgcolor=#999999
|
*[[Pogramimi/O#operatori|operatori]]
*[[Pogramimi/Z#zona|zona]]
*[[Pogramimi/V#vleshmëria|vleshmëria]]
*[[Pogramimi/V#variabla globale|variabla globale]]
*[[Pogramimi/V#variabla statike|variabla statike]]
*[[Pogramimi/V#variabla lokale|variabla lokale]]
*[[Pogramimi/M#main()|main()]]
*[[Pogramimi/S#sistemi|sistemi]]
*[[Pogramimi/T#teknika|teknika]]
|}
* [[C++/Shembuj/Kapitulli/1#Shembulli 2 Operatori për zona të vlershmërisë|Shembulli 02 Operatori për zona të vlershmërisë]]
Në këtë shembull me ndihmen e një operatorit mundësohet ndërhyrja në variablat globale dhe ato lokale (të përkufizuara për një zonë të caktuar). Në rastin tonë është japur e drejta mbi variablen globale të emërtuar <code>IndexIm</code> edhe për kundër asaj që ekziston një variabel lokale me të njëjtin emër brenda funksionit <code>main()</code>. Për të marr të drejten mbi variablen globale <code>IndexIm</code>, me ndihmen e dypikave të dyfishta (<code>::</code>) në rreshtat 11, 13, dhe 16 kemi lajmëruar sistemin që dojmë të përdorim variablen globale të përkufizuar në rreshtin 4 dhe jo atë lokale që kemi përkufizuar në rreshtin 8.
 
Kjo teknik mundsonë marrjen e së drejtes mbi variablat globale kudo në kod. Këto variabla mund të përdoren më tutje për logaritje, si parametra të funksioneve apo edhe për qllime tjera. Mirëpo keqpërdorimi i till për variablat që ndryshe janë të mshefura, nuk lë përshtypje për një programim të pastërt, sepse në këtë mënyrë kodi bëhet i pakuptueshëm. Në këto raste është mirë zgjedhja e emrave vetjak për variablat, duke pasur parasyshë që mundësia e emertimit me të njëjtin emër ekziston, nëse të duhet.
 
Para se të kalojmë në shembullin tjetër, do të ishte e udhës që kodin nga [[C++/Shembuj/Kapitulli/1#Shembulli 2 Operatori për zona të vlershmërisë|ky shembull]] t'a kompiloshë. Shembulli i ardhëshem do t'i kushtohet operatorit <code>cout</code> në rreshtat 10, 11, 15 dhe 16.
 
===Program i orientuar në objekte===
{|width=200px align=right
|-bgcolor=#aaaaaa
|Shprehje të shfrytëzuara
|-bgcolor=#999999
|
*[[Pogramimi/P#POO|POO]]
*[[Pogramimi/O#ojekti|objekti]]
*[[Pogramimi/D#dalja|dalja]]
*[[Pogramimi/H#hyrja|hyrja]]
*[[Pogramimi/Rr#rryma|rryma]]
*[[Pogramimi/Rr#rrymimi|rrymimi]]
*[[Pogramimi/C#cout|cout]]
*[[Pogramimi/P#printf()|printf()]]
*[[Pogramimi/T#Biblioteka Stream|Biblioteka Stream]]
*[[Pogramimi/L#lidhja|lidhja]]
*[[Pogramimi/O#operatori >>| operatori >>]]
*[[Pogramimi/C#char|char]]
*[[Pogramimi/Z#zinxhir|zinxhir]]
|}
#[[C++/Shembuj/Kapitulli/1#Shembulli 3 Dalja e zakonshme 'cout'|Shembulli 03 Dalja e zakonshme 'cout']]
Ky shembull është shembulli i parë i programimit të orientuar në objekte, në të vërtet shumë i thjeshtë. Në këtë program përkufizojmë disa variabla dhe po aty ju japim edhe vlera. Në pjesen e daljeve të zakonshme, në rreshtat 17 deri 20 dhe 23 deri 26, i përdorim këto variabla. Parafjala <code>cout</code> shkruhet me qëllim që nëpërjet daljes së zakonshme (Ekrani) të shpallosen të dhënat. Për këtë qëllim në versionet e vjetra është përdorur funksioni <code>printf()</code>. Në mes këtyre dyjave ekziston dallimi. Për deri sa me <code>printf()</code> duhet që të lajmërohet sistemi për tipin e të dhënave për dalje, me <code>cout</code> kjo nuk është e nevojshme. Këtu duhet pasur parasyshë që <code>cout</code> drejtëpërdrejt nuk është funksion për dalje. Mirëpo ne mund të përdorim si të till, për deri sa nuk e japim përkufizimin e saktë në mësimet pasuese. Deri atëher na mjaftonë të dimë se <code>cout</code> është objekt, dhe ne jemi duke e përdorur vetin e tij për dalje të të dhënave d.m.th shpallosjen e tyre në ekran.
{|
|<pre>
17
18
19
20
:
23
24
25
26
</pre>
|<pre>
std::cout << "Vlera per 'IndexIm' eshte : " << IndexIm << "\n";
std::cout << "Vlera per 'Distanca' eshte : " << Distanca << "\n";
std::cout << "Vlera per 'Shkronja' eshte : " << Shkronja << "\n";
std::cout << "Vlera per 'Emri' eshte : " << Emri << "\n";
:
std::cout << "Vlera decimale per 'IndexIm' eshte : " << std::dec << IndexIm << "\n";
std::cout << "Vlera oktale per 'IndexIm' eshte : " << std::oct << IndexIm << "\n";
std::cout << "Vlera heksadecimale per 'IndexIm' eshte : " << std::hex << IndexIm << "\n";
std::cout << "Vlera e shkruar per 'Shkronja' eshte : " << (char)Shkronja << "\n";
</pre>
|}
Në C++ si dhe në versionet e vjetra të C-së, nuk ka pjesë përbërse të tyre për funksion të daljes, por përdoret bibloteka për dalje e quajtur ''Biblioteka Stream''. Në këtë mënyrë mundësohet futja elegante e funksioneve hyrse dhe dalëse. Lidhja e kësaj bibloteke në shembullin tonë bëhet në rreshtin 2.
 
{|
|<pre>2</pre>
|<pre>#include <string></pre>
|}
Operatori <code> << </code> shkaktonë që varaiablat apo konstantet që pasojnë menjëherë pas tij të jepen për dalje, mirëpo se si duhet të ndodhë kjo, ja lë sistemit të vendosë. Në rreshtin 17, së pari udhëzojmë sistemn që të shpalosë zinxhirin e të dhënave. Kjo ndodhë pasi që fillon kopjimi i secilës germë në ekranë. Pastaj sistemi duhet të shpalosë vleren për <code>IndexIm</code>. Këtu duhet të kemi parasyshë që ne nuk e kemi njoftuar sistemin se çfar lloji është <code>IndexIm</code>, ashtu që të jepë vlerën përkatëse. Pasi që nuk e kemi njoftuar sistemin, atëher ai e merr përsipër të vendosë për <code>IndexIm</code>, është variabël apo konstant. Pasi që sistemi të ketë gjetur tipin, ja lëmë që ai të përdorë vlerat standarte dhe se sa simbole duhet të shpalose. Në këto raste, sistemi zgjehë saktësisht numrin e simboleve sa duhet për shalosje, pa ndonjë fushë të zbrazë para apo pas, pra atë çka ne dojmë për këtë shpalosje. Si përfundim, kalimi në kryerresht jipet me një shenjë dhe mbyllet me pikë-presje.
 
Gjatë ftesës së funksionit për dalje <code>cout</code>, në rreshtin 17, kemi bërë ftesen e dy funksioneve të ndryshme, pasi që si për dy hallkat e zinxhirit të shenjave kemi përdorur funksion edhe për variablat e tipit <code>int</code>. Këto janë shenjat e para të programit të orientuar në objekte, ne e ftojmë sistemin thjeshtë që të shpalosë vlerat dhe i lëmë dorë të lirë për gjetjen e funksionit përkatës. Nuk është e nevojshme që saktësisht të informojmë sistemin, se si të shpalos të dhëat, por vetëm, që të dhënat janë për t'u shpalosur. Ky shembull ishte i ligësht për gjuhë programuese të orientuar në objekte dhe në mësimet e mëtejshme me siguri që do të thellohemi më shumë.
 
Në rreshtin 18, udhëzojmë që sisemi të na shpalosë një zinxhir tjetër të shenjave, të përcjellur me numër me presje dhe një zixhir tjetër që përbëhet nga shenjat. Në këtë rastë kemi udhëzuar sistemin të shpalosë një numër me presje pa shkruar ndonjë paralajmrim konkret mbi tipin e variables dhe prap i lejomë sistemit të vendosë për dalje duke u orientuar në llojin e variablës. Me këtë proce kemi humbur paksa kontrollin, pasi që ne nuk mund të vendosim p.sh se sa hapsira boshe duhet të jenë para apo pas zinxhirit të shenjave, para apo pas presjes. Me këtë proces ne kemi vendosur që sistemi të vendos se si do të pasojë shpalosja në ekran.
 
Variabla e emërtuar me emrin <code>Shkronja</code> është përkufizuar si e tipit <code>char</code> dhe në rreshtin 14 i është dhënë vlera <code>X</code>. Ndërsa kjo variabel në rreshtin 19 shpaloset si shkronjë, pasi që objekti <code>cout</code> e dinë që ka të bëjë me shkronja dhe e jepë përkatësish variablen.
 
Pasi që C++ mbanë operator dhe funksione të gatëshme për zinxhir të shenjave, funksionet për shpalosjen e zinxhirve të shenjave janë shumë të përshtatëshëm. Është e udhës që të shfletosh dokumentimet e dhëna të kompiluesit tëndë. Në do gjenë imtësira mbi formatimet e mundëshme. <code>cout</code> dhe <code>printf()</code> mund të përdoren njëra pas tjetrës.
 
===Biblioteka 'stream'===
{|width=200px align=right
|-bgcolor=#aaaaaa
|Shprehje të shfrytëzuara
|-bgcolor=#999999
|
*[[Pogramimi/F#formatimi|formatimi]]
*[[Pogramimi/F#formësimi|formësimi]]
*[[Pogramimi/I#ilustrimi|ilustrimi]]
*[[Pogramimi/P#përshkrimi|përshkrimi]]
*[[Pogramimi/Sh#shpalosja|shpalosja]]
*[[Pogramimi/Sh#shfaqja|shfaqja]]
*[[Pogramimi/Sh#shënimi|shënimi]]
*[[Pogramimi/N#notimi|notimi]]
*[[Pogramimi/N#notacioni|notacioni]]
*[[Pogramimi/S#speciale|speciale]]
*[[Pogramimi/V#veçorja|veçorja]]
*[[Pogramimi/V#vendimi|vendimi]]
*[[Pogramimi/V#vendosja|vendosja]]
|}
Biblioteka e quajtur <code>stream</code> është përkufizuar për përdorim me C++, me qëllim të ngritjes së efektivitetit të gjuhës. Funksioni <code>printf()</code> është krijuar në të kaluare e largët të C-së dhe duhej të shërbente për gjitha mundësit e programimit. Kështu që u shëndrrua në një funksion të 'trashë' me ngarkesa të shumta, të cila vetëm nga një pjesë e vogël e programuesve përdorej. Përkufizimi i biblotekës së hollë <code>stream</code> i mundëson programuesve të drejten mbi gjitha formatimet e mundëshme, mirëpo duke ngarkua vetë copa të kërkuara për momentin. Ne këtu, nuk po thellohemi që të shikojmë mundësit që ofron biblioteka <code>stream</code> C++. Në dokumetimet që ke marrur së bashku me kompiluesin janë të rreshtuara në një listë, komplet, gjitha mundësitë që ofron kjo bibliotek.
 
Në rreshtat nga 23 deri 26 ilustrohen disa funksione plotësuese të bibliotekës <code>stream</code>. Këto funksione, ti mund të i përdorë për të shpalosur të dhënat nduardurshëm dhe pa humbur kontrollin mbi to. Vlera për <code>Index</code> shpaloset duke u shënuar në formë decimale, okatle dhe heksadecimale. Menjëhet pasi që të shënohet ndonjëri nga operatoret special për zinxhirt të shenjave, <code>dec</code>, <code>oct</code> apo <code>hex</code> pas tij pason shpalosja e zinxhirit sipas formës përkatëse të operatorit. Kështu bie fjala në rreshtin 30, vlera për <code>Index</code> shpaloset duke u shprehur në shira heksadecimale. Kjo ndodhë pasqi që në rreshtin 25 është zgjedhur kjo formë. Po në rastë se nuk zgjidhet ndonjëri nga këta operator special, sistemi do të merr vendimin për formen standarte d.m.th decimale.
 
===Operatori 'cin'===
{|width=200px align=right
|-bgcolor=#aaaaaa
|Shprehje të shfrytëzuara
|-bgcolor=#999999
|
*[[Pogramimi/C#cin|cin]]
*[[Pogramimi/V#vegla|vegla]]
*[[Pogramimi/P#prektorja|prektorja]]
*[[Pogramimi/T#tastatura|tastatura]]
*[[Pogramimi/H#hyrja standarte|hyrja standarte]]
*[[Pogramimi/L#leximi|leximi]]
*[[Pogramimi/T#të dhënat|të dhënat]]
*[[Pogramimi/D#data|data]]
*[[Pogramimi/O#oct|oct]]
*[[Pogramimi/D#dec|dec]]
*[[Pogramimi/H#hex|hex]]
*[[Pogramimi/F#forma|forma]]
*[[Pogramimi/C#cerr|cerr]]
|}
Përanashë operatorëve që përkujdesen për rrjedhen e të dhënave si operatori <code>cout</code> ëshë edhe operatori <code>cin</code>. Operatori <code>cin</code> është një vegël e cila përdoret për leximin e të dhënave të futura nga hyrja standarte (zakonisht prektorja e kompjuterit). <code>cin stream</code> shfrytëzonë operatorin <code> >></code>. Pjesa më e madhe e veprimeve të operatorit <code>cout</code>, paraqite edhe tek <code>cin<code>. Një shembull të shkurt mbi përdorimin e <code>cin</code>-it, mund ta shohësh në rreshtat 28 deri 30. Operatorët special për rrymim të të dhënave, <code>dec</code>, <code>oct</code> dhe <code>hex</code>, edhe këtu vendosin për <code>cin</code>, pavarsisht nga <code>cout</code>. Forma standarte edhe këtu është ajo decimale.
 
Përpos objekteve <code>cout</code> dhe <code>cin</code>, që përkujdesen për rrymim të të dhënave, është edhe një tjetër operator që paraqite si fjalë <code>cerr</code>. Nëpërjetë këtij zakonisht shpalosen gabimet. Për dallim nga <code>cout</code>-it nuk mund të ridrejtohet në regjistëra. Për përdoruesit e versioneve C është mirë të thuhet se tre objektet për rrymimin e të dhënave, <code>cout</code>, <code>cin</code> dhe <code>cerr<code> i përgjegjen treguesve për rrymim të të dhënave <code>stdout</code>, <code>stdin</code> dhe <code>stderr</code> të gjuhës së vjetër C.
 
Biblioteka <code>stream</code> ka në vete po ashtu për rrymim (hyrje/dalje) të regjistrave. Këtë do ta shikojmë më thellë në shembullin e ardhëshem.
 
Do të ishte e udhës që tani të kompiloshë [[C++/Shembuj/Kapitulli/1#Shembulli 3 Dalja e zakonshme 'cout'|këtë shembull]] para se të kalosh në tjetrin. Ke parasyshë që sistemi kërkon futjen e të dhënës si numër i plotë, i cili do të shpaloset prapë në ekran me ndryshim që kjo shpalosje do të jetë në formë heksadecimale.
 
===Hyrje-Dalje e Regjistrave===
*[[C++/Shembuj/Kapitulli/1#Shembulli 4 Hyrje-Dalje e Regjistrave|Shembulli 04 Hyrje-Dalje e Regjistrave]]
{|width=200px align=right
|-bgcolor=#aaaaaa
|Shprehje të shfrytëzuara
|-bgcolor=#999999
|
*[[Pogramimi/M#makina shtypse|makina shtypse]]
*[[Pogramimi/P#printeri|printeri]]
*[[Pogramimi/Sh#shtypja|shtypja]]
*[[Pogramimi/F#file|file]]
*[[Pogramimi/I#ifstream|ifstream]]
*[[Pogramimi/L#ofstream|ofstream]]
*[[Pogramimi/D#demostrimi|demostrimi]]
*[[Pogramimi/K#klasa|klasa]]
*[[Pogramimi/O#objekti|objekti]]
*[[Pogramimi/G#germa|germa]]
*[[Pogramimi/Sh#shkronja|shkronja]]
*[[Pogramimi/B#biblioteka|biblioteka]]
*[[Pogramimi/K#kërkesa|kërkesa]]
*[[Pogramimi/A#ASCII|ASCII]]
*[[Pogramimi/K#kartoteka|kartoteka]]
*[[Pogramimi/P#punishtja|punishtja]]
*[[Pogramimi/V#vendpunishtja|vendpunishtja]]
*[[Pogramimi/P#pika|pika]]
|}
Programi RRYM.CPP, është shembull i rrymimit të të dhënave nga regjistrat e ndryshë. Në këtë program përdoren disa objekte të C++ të cilat deri më tani nuk i kemi përdorur dhe ndoshta duhet të kënaqemi me kuptimin e kufizuar të tyre.
 
Në këtë program hapim një regjistër dhe e lexojmë. Të dhënat e marruna nga regjistri në daljen e parë i kopjojmë në një regjistër që e krijojmë dhe e ruajmë, ndërsa në një dalje tjetër e pregatitim makinen shtypse për pranimin dhe shtypjen e të dhënave të lexuara nga regjistri i hapur. Në gjuhën C, regjistrat kanë pasur si për hyrje dhe për dalje tipin <code>FILE</code>, mirëpo <code>ifstream<code> përdoret për leximin nga regjistrat e përdorur dhe <code>ofstream</code> për shkrim të të dhënave. Kjo demostrohet në rreshtat 7 deri 9 të shembullit tonë. Si do të shohim më vonë, <code>ifstream</code> është një klasë e C++ dhe <code>RegjistriIm</code> një objekt i kësaj klase.
 
I vetmi dallim në mes të rrymimit të të dhënave nga programi i mëparshëm dhe këtij shembulli qëndronë se : në programin e mëparshë hapjen e regjistrave e ka bërë sistemi vetvetiu për ne. Me siguri të ka 'ra në sy' që Makina e shtypit përdoret njëllojë si <code>cout</code> në programin e mëparshëm. Natyrishtë që regjistrat që i kemi hapur duhet edhe të mbyllen, fundi i fundit dëshirojmë të praktikojmë një programim të mirëfilltë.
 
Në këtë program përdorim objekte, pra është programi i parë i mirëfillt ku përdorim objekte në shembujt tanë. Objektin me emrin <code>RegjistriIm</code> në rreshtin 16, e udhëzojmë që të hapet vetëvetiu. Në rreshtin e 40 duhet që të lexojë germë për germë, në rreshtin 47 është udhëzimi për vetëmbyllje. 'Pikës'- shënimi për objekte përdoret ngjajshëm si për strukturat në C. Shkruhet emri i objektit, pas së cilës shkruhet 'pika' dhe pas saj shkruhet udhëzimi që duhet të zbatojë objekti. Ngjajshëm veprohet edhe me objeket <code>RegjistriDalja</code> dhe <code>Makinashkrimit</code>.
 
Në internet ka tekste të shumta mësimore mbi biblioteken <code>stream</code>, në të vërtet këto janë në gjuhët e huaja. Mirëpo për fillim studimi i saj nuk është edhe aq i nevojshëm. Pasi që të kemi fituar një shprehi të shprehjeve nga gjuha C++ do të studiojmë së bashku këtë bibliotek dhe ta pregatisim edhe me shpjegime në gjuhën shqipe.
 
Do të ishte mirë që tani të komplimoshë [[C++/Shembuj/Kapitulli/1#Shembulli 4 Hyrje-Dalje e Regjistrave|këtë shembull]] dhe ta nxitosh programin e krijuar. Do të kërkojë nga ti një regjistër për ta kopjuar. Ti mund ti japësh një regjistër të çfardoshëm ASCII i cili gjendet në të njëjtën kartotek (punishte) në të cilen ndodhet programi.
 
===Krijimi, përkufizimi dhe dëftimi i ndryshoreve===
*[[C++/Shembuj/Kapitulli/1#Shembulli 5 Krijimi, përkufizimi dhe dëftimi i ndryshoreve|PERVAR.CPP]]
{|width=200px align=right
|-bgcolor=#aaaaaa
|Shprehje të shfrytëzuara
|-bgcolor=#999999
|
*[[Pogramimi/K#krijimi|krijimi]]
*[[Pogramimi/D#dëftimi|dëftimi]]
*[[Pogramimi/D#deklarimi|deklarimi]]
*[[Pogramimi/I#inicializimi|inicializimi]]
*[[Pogramimi/H#hapsira|hapsira]]
*[[Pogramimi/E#ekzistimi|ekzistimi]]
*[[Pogramimi/Q#qënja|qënja]]
*[[Pogramimi/K#kuptimi|kuptimi]]
*[[Pogramimi/A#automatizimi|automatizimi]]
*[[Pogramimi/M#memoria|memoria]]
*[[Pogramimi/V#vlefta|vlefta]]
*[[Pogramimi/K#kontrrollimi|kontrrollimi]]
|}
Në këtë shembull ndërtë tjera janë paraqitur edhe risit rreth ndryshoreve në gjuhën C++. Në C++ flitet për ndryshoret globale dhe lokale si dhe për incicializimin e tyre. Është fjala për variabla. Këtyre variablave ju caktohet hapsira e ekzistimit/kuptimit të tyre brenda programit apo brenda një zone (funksioni etj.), ju jepet një emër dhe inicializohen me iniciale që në të njëjten kohë paraqesin vlerat fillestare të tyre. Varsisht nga hapsira e veprimit flitet për variabla të përgjithëshme/globale dhe për ato lokale. Në C++ variablat globale inicializohen automatikisht me vleren zero. Variablat <code>IndexIm</code>, në rreshtin 4 dhe <code>Luki</code> inicializohen me 0 automatikisht. Natyrisht që ti mund të i inicializoshë me vlera tjera, nëse donë.
 
Variablat që kanë domethënje vetëm brenda një funksioni d.m.th variablat e deklaruara vetem për një funksion nuk inicializohen automatikisht me vleren o, por marrin vleren e cila gjendet e gatëshme në memorie në vendin ku është përkufizuar variabla. Kjo vlerë nuk ka vleftë. Sipas kësaj, p.sh variabla në rreshtin 8 nuk ka vleftë, por vetem ndonjë vlerë e cila nuk 'mund' të përdoret për diçka të mirëfillt (?). Në rreshtin 11 kësaj i jepet një vlerë sipas inicializimit të <code>IndexIm</code>. Kjo vlerë pastaj kontrrollohet në ekranë.
===Përkufizimet mund të nxitohen===
Edhe për fillestarët e C-së, rreshti 16 duket pak sa i çuditëshem, mirëpo në C++ është i lejushëm. Në atë zonë ku është i lejushëm futja e urdhërit nxitues, është i lejueshëm deklarimi i variablave. Deri tek ky pohim vijem duke pas parasyshë që deklarimi i variablave në C++ merret si urdhër. Në rastin tonë, përkufizojmë variablen e re <code>PerseriDickaTjeter</code> duke e inicializuar me vlerën. Kohëzgjatja e qënjes së kësaj variable fillon nga pika e përkufizimi deri te fundi i blokut/zonës në të cilën është përkufizuar. Në rastin e <code>PerseriDickaTjeter</code> deri në fund të programit <code>main()</code>. Variabla <code>Luki</code>, përkufizohet më vonë, në rreshtin 27.
 
Është me rëndësi qenësore përkufizimi i variablave pranë pikës së përdorimit të tyre. Me këtë lidhëshmëri lehtësohet rishikimi se për çfarë përdoret variabla, pasi që veprimi i sajë është kufizuar brenda një zone. Gjatë gjetjes së kapgabimit është më lehtë të vije deri tek ai kur të jetë përfilluar kjo shprehi.
 
===Referencat në C++===
Ke kujdes tek shenja ' <code>&</code> ' në rreshtin . E dëftonë <code>DickaTjeter</code> si referencë. kjo mënyrë e referimit është mirë të përdoret me rezervë. Ky shembull i dëftimit mbi një burim na ndihmonë që të kuptojmë shprehjen referimi. Një përdorim i till nuk ka qenë i mundëshem në C. Pas inicializimit të kësaj refernce ajo shndrrohet në sinonim për variablen <code>Dicka</code>. Ky sinonim mund të përdoret brenda C++ për të ndryshuar vleren e variables. Referenca duhet që të inicializohet në kohen kur bëhet deklarimi i variables, përndryshe kompiluesi na lajmronë për gabim. Për cilën variabël tregonë referenca më vonë në program nuk mund të ndryshohet. Përdorimi i references është paksa i vështirë pasi që ne dëshirojmë që ajo të jetë një variabël referuese, çka d.m.th ne e marrim si variabël por ajo nuk është e tillë pasi që nuk mund të ndryshohet. Domë apo nuk domë të na pëqenë emrërtimi variabël për referencen ajo ashtu thirret.
 
Nëse përdoret referenca si në shembullin tonë, kjo do të shpije deri tek një kod me dukje 'labirinthi'. Mirëpo referenca mund të përdoret edhe ndryshe, ashtu që të ndihmojë për një pasqyrë të pastër të kodit. Kësaj teme do ti kushtojmë pak më shumë kohë më vonë.
===Përkufizimet mund të aplikohen===
Edhe për fillestarët e C-së, rreshti 16 duket pak sa i çuditëshem, mirëpo në C++ është i lejushëm. Në atë zonë ku është i lejushëm futja e urdhërit nxitues, është i lejueshëm deklarimi i variablave. Deri tek ky pohim vijem duke pas parasyshë që deklarimi i variablave në C++ merret si urdhër. Në rastin tonë, përkufizojmë variablen e re <code>PerseriDickaTjeter</code> duke e inicializuar me vlerën. Kohëzgjatja e qënjes së kësaj variable fillon nga pika e përkufizimi deri te fundi i blokut/zonës në të cilën është përkufizuar. Në rastin e <code>PerseriDickaTjeter</code> deri në fund të programit <code>main()</code>. Variabla <code>Luki</code>, përkufizohet më vonë, në rreshtin 27.
 
Është me rëndësi qenësore përkufizimi i variablave pranë pikës së përdorimit të tyre. Me këtë lidhëshmëri lehtësohet rishikimi se për çfarë përdoret variabla, pasi që veprimi i sajë është kufizuar brenda një zone. Gjatë gjetjes së kapgabimit është më lehtë të vije deri tek ai kur të jetë përfilluar kjo shprehi.
 
===Përkufizimi dhe dëftimi i elementeve===
Përkufizimet nga programuesit në C++ përkufizohen në termin <code>Definition</code>, ndërsa dëftimet përkufizohen nën shprehjen <code>declaration</code>. Këto dy shprehje që në jeten e përditëshme mund të kenë kuptim të përafërt, të përkufizuara kanë dallim të madhë. Kështu deklarimi njofton kompiluesin për vetit e një tipi apo një funksioni mirëpo nuk përkufizon asnjë kod që përdoret në ndonjë program të aplikueshëm. Në anën tjetër, definicioni, përkufizon diçka që në programin e aplikueshëm me të vërtet ekziston si bie fjala, ndonjë variabël ose rresht të kodit. Secili element në program duhet të ketë saktësisht një përkufizim. Shkurt deklarimi fut një emër në program, ndërsa definicioni përkufizo një kod, e kjo kërkon hapsirë në memorie.
 
Kur deklarojmë një strukturë, në fakt deklarojmë një stamp (shabllon). Këtë stamp më vonë në program, kur të kemi deklaruar variablat e këtij tipi, kompiluesi i regjistronë. Po nëse e përkufizojmë variablen e këtij tipi, deklarojmë emrin e kësaj variable dhe përkufizojmë vendin hapsinorë për vlerat e saj në memorie. Për këtë gjatë përkufizimit të variablave kryejmë dy veprime: ne i definojmë dhe deklarojmë në të njjten kohë. Pra bëjmë përkufizimin dhe dëftimin e përkufizimit të variables.
 
Në versionet e vjetra, pra në C, janë të lejuara disa definime të një variable, për deri sa ato definime janë të njëjta dhe kanë të bëjnë ër të njëjtën variabël. C++ e ndalon një veprim të till për shkaqe të arsyeshme që do t'i shohim në mësimet e ardhëshme.
 
Mos u brengos rreth këtyre shprehjeve ''përkufizim'',''dëftim'',''deklarim'' dhe ''definim''. Këto do të na përcjellin gjatë gjithë kohës dhe me siguri me kalimin e kohës do të bëhen të qarta.
 
===Qarkorja 'for'===
Shiko qarkoren <code>for</code>, të definuar në rreshtin 20. Kjo formë e krijimit të qarkut me shprehjen <code>for</code> është më e pastërt se secila më parë, kjo vije pasi që indeksi i qarkullimit vetë definohet në qarkoren <code>for</code>. Kohëzgjatja e qënjes së qarkores varret nga rinia e kompiluesit (i ri apo i vjetër).
 
Nëse ke kompilues pak sa të vjetër, kohëzgjatja e qenjës së indeksit fillon nga pika e definimit deri në fund të mbylljes së bllokut. Në këtë rastë ka vleftë deri në rreshtin 32, pasi që klapa gjarpërore mbyllëse në rreshtin 32 është edhe mbyllës e bllokut. Po pasi që variabla gjendet në gadishmëri ajo mund të përdoret për qarkore tjera apo ndënjë qëllim tjetër e për të cilin qëllim mund të vendoset variabla e tipit <code>int</code>.
 
Po nëse kompiluesi yt është i moshës së re, fundi i qenjës së indeksit vije me fundin e qarkores. Në këtë rastë ka vleftë deri në rreshtin 25, ku mbyllet qarkorja.
 
Pa marr parasysh se sa i vjetër është kompiluesi, variabla me emrin <code>Numruesi2</code> pas çdo qarkullim të qarkut do të definohet dhe inicializohet pasi që është definuar para bllokut të kontrolluar nga qarkorja <code>for</code>. ekzistenca e saj shtrihet vetem brenda kësaj qarkore, kjo d.m.th rreshtat 23 deri 25, ashtu që pas çdo qarkullimi vendi i zënë në memorie automatikisht lëshohet.
 
Do të bie në sy që variablës <code>Numruesi2</code> në rreshtin 23 i jepet një numër, mirëpo për dalje një shkronjë. Ky është rasti ku tregohet se C++ i jep rëndësi saktësisë dë tipit që e dërgonë në dalje. Ndodhë që me kompilues të vjetër si rezulltat të marrësh një numër.
 
Së fundi, në rreshtin 27 definohet variabla statike <code>Luki</code> dhe inicializohet vetëvetiu me vleren o, siç e kemi theksuar edhe më parë. Kohëzgjatja e qënjes së kësaj variable fillon nga pika e definimit deri në fund të bllokut, ku ndodhë edhe inicializimi. Në rastin tonë rreshti 32.
 
Kompilo [[C++/Shembuj/Kapitulli/1#Shembulli 5 Krijimi, përkufizimi dhe dëftimi i ndryshoreve|këtë shembull]] dhe nxito programin.
 
===Përparsia e operatorëve===
 
Përparsia e operatorëve në C++ është identike me përparsit që kanë në C, ne nuk do t'i përkufiojmë ato këtu. Ka pak dallime tek disa operatorë, në rate kur ata të sipëngarkohen. Kjo është një teknikë të cilën do ta mësojmë më vonë. Pas siprngarkimit disa operator punojnë pak sa më ndryshe.
 
Pa brenga, vjen koha dhe sjellë sqarimet me veti.
 
===Do të ishte e udhës===
 
# Të shkruashë një program të till që shpalosë emrin dhe ditëlindjen tëndë në ekran tri herë. Për këtë shfrytëzo ndihmen e objektit për rrymimin e të dhënave <code>cout</code>. Gjitha variabla e nevojshme provo të i definoshë afër vend shfrytëzimit të tyre.
# Të shkruash një program me disa variabla me vlera të pandryshueshme (<code>const</code>) dhe me vlera të ndryshueshme (<code>volatie</code>). Provo të ndryshoshë vlerat e konstantes, ashtu që të shohësh cilat kapgabime do të marrësh nga kompiluesi yt.
# Të shkruash një program të till që shfrytëzonë objekt rrymimi të të dhënave ashtu që ditëlindjen tënde të pranojë me urdhëresen <code>cin</code>. Shëno ditëlinjen tënde në formë oktalare, decimale dhe heksadecimale.