Professional Documents
Culture Documents
0 3
Hapsira e emrave
Hyrje
N librari t ndryshme mund t prdoren edhe identifikator global. Por, ndodh q identifikator t njjt t shfrytzohet n disa librari. Nse librarit e tilla prdoren njkohsisht n nj program, kompjuteri nuk do t jet n gjendje t'i dalloj identifikatort. Kshtu, p.sh. ne mund t gabojm gjat definimit t nj klase, duke e quajtur ate me emrin e nj klase q sht definuar m par brenda nj librarije t ciln jemi duke e shfrytzuar. Me qllim t kufizimit t dukshmris s elementeve t programeve (konstanteve me emra, variablave ose funkcioneve), ato deklarohen brenda strukturave, klasave ose fajllave. Por, nj gj e till sht m rnd t realizohet, p.sh. pr emrat e strukturave, klasave ose objekteve. Pr kt qllim mund t prdoren hapsira emrash (angl. namespace), prmes s cilave dukshmria e emrave kufizohet vetm n hapsirn ku ato definohen. N programet standarde zakonisht shfrytzohen hapsira standarde e emrave (std). Pr kt qllim, n fillim t programit vendoset direktiva: using namespace std; Brenda ksaj hapsire standarde p.sh. prfshihen emrat cin, cout etj. Por, nse n fillim t programit nuk shnohet direktiva n fjal, sht i pamundur prdorimi i ktyre komandave, prkatsisht kompjuteri do t gjeneroj mesazhe pr gabim. Shembull
// Programi prg1 #include <iostream> int main() { int a; cout << "\nVlera a: "; cin >> a; cout << "\nVlera e lexuar a=" << a << "\n\n"; return 0; }
Nse ekzekutohet programi n formn e dhn, pr komandat cin dhe cout kompjuteri do t na njoftoj se ato jan undeclared identifier. Nnkuptohet se gabimet n fjal do t eliminohen nse shfrytzohet direktiva: using namespace std;
ose nse para komandave n fjal shkruhet emri i hapsirs std, n t ciln ato jan definuar si dhe operatori katr pika (::), kshtu:
// Programi prg2 #include <iostream> int main() { int a; std::cout << "\nVlera a: "; std::cin >> a; std::cout << "\nVlera e lexuar a=" << a << "\n\n"; return 0; }
Prmes ksaj pjese t programit definohet hapsira e emrave jeta, n t ciln prfshihen identifikatort e variablave i e m dhe funkcionit dita(), t cilt njihen edhe si antar t hapsirs s emrave. Shembull Programi n t cilin tregohet qasja te variabla m dhe funkcioni dita(), t cilt jan prfshir n hapsirn e emrave jeta.
// Programi prg3 #include <iostream> using namespace std; namespace jeta { int i,m=5; void dita() { for (i=1;i<=m;i++) cout << "\nDita e bukur"; }
} int main() { cout << "\nVlera e variables m=" << jeta::m << "\n"; jeta::dita(); cout << "\n\n"; return 0; }
Si shihet pr qasje ktu sht shfrytzuar operatori katr pika. Nse paraprakisht hapsira e emrave jeta vendoset n disk, si fajll tekstual me emrin omega.txt, programi do t duket kshtu:
// Programi prg4 #include <iostream> using namespace std; #include "C:\Alfa\omega.txt" int main() { cout << "\nVlera e variables m=" << jeta::m << "\n"; jeta::dita(); cout << "\n\n"; return 0; }
N program nuk do t duhej t shfrytzohej operatori katr pika gjat qasjes te variabla m dhe funkcioni dita, nse paraprakisht shfrytzohet direktiva: using namespace jeta; ashtu si shihet n vijim.
// Programi prg5 #include <iostream> using namespace std; #include "C:\Alfa\omega.txt" using namespace jeta; int main() { cout << "\nVlera e variables m=" << m << "\n"; dita(); cout << "\n\n"; return 0; }
Direktiva:
mund t vendoset kudo n program, por patjetr pas definimit t hapsirs me emra jeta dhe para shfrytzimit t identifikatorve q paraqiten brenda saj. Qasja mund t relaizohet edhe duke e shfrytzuar direktivn using pr secilin identifikator, ashtu si shihet n programin vijues.
// Programi prg6 #include <iostream> using namespace std; #include "C:\Alfa\omega.txt" int main() { using jeta::m; using jeta::dita; cout << "\nVlera e variables m=" << m << "\n"; dita(); cout << "\n\n"; return 0; }
Vlerat e variablave q prfshihen brenda hapsirs me emra mundet edhe t lexohen. Gjat shkruarjes s komands prkatse pr lexim veprohet plotsisht njlloj si edhe gjat shtypjes s vlerave t tyre. Shembull Verzioni i programit i cili u dha m sipr, n t cilin vlera e variabls m lexohet.
// Programi prg7 #include <iostream> using namespace std; namespace jeta { int i,m; void dita() { for (i=1;i<=m;i++) cout << "\nDita e bukur"; } } int main() { cout << "\nVlera e variables m: "; cin >> jeta::m; jeta::dita(); cout << "\n\n"; return 0; }
Shembull
// Programi prg8 #include <iostream> using namespace std; namespace jeta { double const pi=3.1415926; double perimetri(double r) { double p; p=2*pi*r; return p; } } int main() { cout << "\nVlera e variabls pi=" << jeta::pi << "\n"; cout << "\nVlera e llogaritur p=" << jeta::perimetri(5.5) << "\n\n"; return 0; }
<< a << endl; cout << "\nVlera e variabls b: " << b << endl; return 0; }
N kt rast pr variablat a dhe b kompjuteri do ta lajmroj gabimin ambiguous symbol. Q t mos vij deri te nj gabim i till, kompjuterin duhet ta njohtojm sakt se nga cila hapsir me emra merren variablat, p.sh. si n programin vijues.
// Programi prg10 #include <iostream> using namespace std; namespace alfa { int a = 10; double b = 55.55; } namespace beta { double a = 77.77; int b = 20; } int main () { cout << "\nVlera e variabls a: " << alfa::a << endl; cout << "\nVlera e variabls b: " << beta::b << endl; return 0; }
N kt rast do t shtypet vlera e variabls a q prfshihet n hapsirn alfa, kurse pr variabln b do t shtypet vlera e prcaktuar n hapsirn beta. Si zgjidhje m praktike ktu mund t merret ajo e shfrytzimit t direktivs using vetm pr njrn hapsir, p.sh. ashtu si sht dhn n vijim.
// Programi prg11 #include <iostream> using namespace std; namespace alfa { int a = 10; double b = 55.55; } namespace beta { double a = 77.77; int b = 20; } using namespace alfa; int main () {
cout << "\nVlera e variabls a: " << a << endl; cout << "\nVlera e variabls b: " << beta::b << endl; return 0; }
Problemi i konfliktit mund t paraqitet edhe nse identifikatori i njjt paraqitet n nj hapsir dhe n programin kryesor. Shembull
// Programi prg12 #include <iostream> using namespace std; void dita(); namespace jeta { int i; void dita() { for (i=1;i<=7;i++) cout << "\nDita e bukur"; } } int main() { jeta::dita(); dita(); cout << "\n\n"; return 0; }
Ktu funkcioni me emrin dita() njkohsisht definohet n programin kryesor dhe n hapsirn e emrave jeta.
Pjesa e pasistemuar
1.
// Programi prg13 #include <iostream> using namespace std; namespace alfa { int a;
double b; } using namespace alfa; int main() { int a,x; double y; alfa::a=5; a=4; alfa::b=7; x=3; y=a+2*x+alfa::a-2*alfa::b; cout << "\nRezultati y=" << y << endl; return 0; }
const double b=7; void omega(); } using namespace alfa; int main() { int a=4,x; double y; alfa::a=5; x=3; y=a+2*x+alfa::a-2*b; cout << "\nRezultati y=" << y << endl; omega(); // Mund t shkruhat edhe alfa::omega() return 0; } void alfa::omega() { double z; z=a+b; cout << "vlera z=" << z << endl; }
} void alfa::omega() { double z; z=a+b; cout << "vlera z=" << z << endl; }
// Programi prg18 #include <iostream> using namespace std; namespace alfa { int i,x=44,m=5; void dita() { for (i=1;i<=m;i++) cout << "\nDita e bukur"; } namespace beta { double z=88.8; } } int main() { cout << "\nVlera pr x=" << alfa::x << "\n"; alfa::dita(); // Prej namespace t jashtm cout << "\n\nVlera pr z=" << alfa::beta::z; cout << "\n\n"; return 0; }
<< endl; } { using namespace beta; cout << "\nVlera e hapsirs beta: " << a << endl; } return 0; }
Rez.
Ktu shihet se direktivat e veanta using kan efekt vetm brenda blloqeve t programit q prcaktohen me kllapat. Nse mes blloqeve t prcaktuara me dy kllapat e mdha shkruhet komanda:
cout << "\nVlera pas bllokut t par: " << a << endl;
kompjuteri do t lajmroj:
error C2065:'a': undeclared identifier
Me kt duhet nnkuptuar ate q u tha m sipr se efekti i direktivave using brenda programit kufizohet n blloqet q prcaktohen me kllapat e mdha.
cout << "\nVlera n hapsirn jeta: " << x << endl; return 0; }
double y; dita(); // Prej namespace jeta y=dita(7); cout << y; cout << "\n\n"; return 0; }
----------------------------------------------------------------------------------------------------------------------------