laborator 5 poo

6
Laboratorul 5. Clase și funcții prietene O funcție este prietenă (friend) cu o clasă dacă are acces la datele membru private ale acelei clase. O funcție prietenă poate fi o funcție globală sau chiar o funcție membru a altei clase. O clasă este prietenă cu o altă clasă dacă are acces la datele membru ale acesteia. O funcție, respectiv o clasă prietenă se declară utilizând cuvântul friend astfel: 1. friend tip_funcție nume_funcție (Lista_parametri_formali); // funcție friend globală 2. friend tip_funcție nume_clasă :: nume_functie (Lista_parametrii_formali); // funcție friend membru 3. friend nume_clasa; Exemplu 1. #include <iostream> #include <conio.h> using namespace std; class A { public: // se declara clasa B ca fiind clasa prietena a clasei A friend class B; // declararea functiei g_print_m ca si functie prietena cu clasa A friend void g_afiseaza_m(); private: int m; }; class B { public: void afiseaza_m() { A a; a.m = 255; cout << "clasa B este prietena cu clasa A" << endl << " poate accesa membrul privat A::m" << endl << a.m << endl; } }; void g_afiseaza_m() { A a; a.m = 300; cout << "functia g_afiseaza_m nu este un membru a clasei A dar este prieten" << endl << "poate accesa membrul privat A::m " << endl << a.m << endl; } int main() {

Upload: constantin-palita

Post on 26-Dec-2015

28 views

Category:

Documents


8 download

DESCRIPTION

poo

TRANSCRIPT

Page 1: Laborator 5 POO

Laboratorul 5. Clase și funcții prietene

O funcție este prietenă (friend) cu o clasă dacă are acces la datele membru private ale

acelei clase. O funcție prietenă poate fi o funcție globală sau chiar o funcție membru a altei

clase.

O clasă este prietenă cu o altă clasă dacă are acces la datele membru ale acesteia.

O funcție, respectiv o clasă prietenă se declară utilizând cuvântul friend astfel:

1. friend tip_funcție nume_funcție (Lista_parametri_formali); // funcție friend globală

2. friend tip_funcție nume_clasă :: nume_functie (Lista_parametrii_formali); // funcție

friend membru

3. friend nume_clasa;

Exemplu 1.

#include <iostream> #include <conio.h> using namespace std; class A { public: // se declara clasa B ca fiind clasa prietena a clasei A friend class B; // declararea functiei g_print_m ca si functie prietena cu clasa A friend void g_afiseaza_m(); private: int m; }; class B { public: void afiseaza_m() { A a; a.m = 255; cout << "clasa B este prietena cu clasa A" << endl << " poate accesa membrul privat A::m" << endl << a.m << endl; } }; void g_afiseaza_m() { A a; a.m = 300; cout << "functia g_afiseaza_m nu este un membru a clasei A dar este prieten" << endl << "poate accesa membrul privat A::m " << endl << a.m << endl; } int main() {

Page 2: Laborator 5 POO

B b; b.afiseaza_m(); g_afiseaza_m(); getch(); return 0; }

Exemplu 2.

#include<iostream> #include<conio.h> using namespace std; class nod{ int info; nod* urm; public: void adaugare(nod*&, int); void listare(nod*); friend void sterg(nod*, int); }; nod *v, *sf; void nod::adaugare(nod*& v, int val) { nod* c; if (!v) { v=new nod; v->info=val; v->urm=0; sf=v; } else { c=new nod; sf->urm=c; c->info=val; c->urm=0; sf=c; } } void nod::listare(nod* v) { nod* c=v; while (c) { cout<<c->info<<" "; c=c->urm; } cout<<endl; } void sterg(nod * v, int val) { nod *c, *man;

Page 3: Laborator 5 POO

if (v->info==val) { man=v; v=v->urm; } else { c=v; while (c->urm->info!=val) c=c->urm; man=c->urm; c->urm=man->urm; if (man==sf) sf=c; } delete man; } void main() { int i; nod lista; for (i=1; i<=10; i++) lista.adaugare(v,i); lista.listare(v); sterg(v,2); lista.listare(v); getch(); }

Liste

Inserare la început

Page 4: Laborator 5 POO

p->urm=prim;

prim=p;

Inserarea la sfârsit

p->urm=NULL;

if(prim==NULL )

prim=p;

else

{

q=prim;

while(q->urm!=NULL)

q=q->urm;

q->urm=p;

}

Inserarea ordonata a unui nod într-o lista

if(prim==NULL)

return p; /*inserarea primului nod*/

else

if(strcmp(prim->nume,p->nume)>0)

{

p->urm=prim;/* inserare inainte de primul nod*/

return p;

}

else

{

Page 5: Laborator 5 POO

q=prim;

while(q->urm!=NULL && strcmp(q->urm->nume,p->nume)<0)

q=q->urm;

p->urm=q->urm;/*inserare pe parcurs sau la sfarsit*/

q->urm=p;

return prim;

}

Stergerea unui nod din lista

nod* stergere(nod *prim,char *nume){

nod *q,*p;

if(prim!=NULL) /*daca lista nu este vida*/

{

if(strcmp(prim->nume,nume)==0)

{

q=prim;

prim=prim->urm; /*stergerea primului nod*/

delete q;

return prim;

}

q=prim;

while(q->urm!=NULL && strcmp(q->urm->nume,nume)!=0)

q=q->urm;

if(q->urm!=NULL && strcmp(q->urm->nume,nume)==0)

{

p=q->urm;

q->urm=q->urm->urm;/*stergerea unui nod din

interiorul listei sau de la sfarsit*/

delete p;

}

return prim;

}

else

{

printf(“\nLista vida!”);

return prim;

}

}

Page 6: Laborator 5 POO