Documente Academic
Documente Profesional
Documente Cultură
Poo PDF
Poo PDF
Facultatea de Inginerie
Departamentul de Automatică, Energie şi Mediu
Programare orientată pe
obiecte
Curs 3
1. Tablouri de obiecte
2. Membrii statici ai unei clase
3. Manevrarea dinamica a
obiectelor
4. Pointerii catre membrii unei
clase
Punct triunghi[3];
Punct triunghi[3] = {
Punct (1,2),
Punct(30,90),
Punct (40,40)
};
Programare orientată pe obiecte C++/Java 14.10.2013
1.Tablouri de obiecte
6
1. Tablouri de obiecte
2. Membrii statici ai unei clase
3. Manevrarea dinamica a
obiectelor
4. Pointerii catre membrii unei
clase
Exemplu:
#include<iostream.h>
int x=100; // variabila globala x
class cu_static{
static int x; // informatie protejata x
static int y; // informatie protejata y
public:
void afiseaza()
{
cout<<"cu_static::x = "<<x<<endl;
cout<<"cu_static::y = "<<y<<endl;
}
};
Programare orientată pe obiecte C++/Java 14.10.2013
2. Membri statici ai unei clase
17
cu_static::x = 1
cu_static::y = 2
variabila globala x = 100
1. Tablouri de obiecte
2. Membrii statici ai unei clase
3. Manevrarea dinamica a
obiectelor
4. Pointerii catre membrii unei
clase
Exemple:
// varianta C
int *pointer=(int*)malloc(sizeof(int));
// varianta C++
int *pointer= new int;
1. Tablouri de obiecte
2. Membrii statici ai unei clase
3. Manevrarea dinamica a
obiectelor
4. Pointerii catre membrii unei
clase
// functii membre
pozitie(int abcisa=0, int ordonata=0) // constructor
{
x = abcisa;
y = ordonata;
cout<<"Constructor ";
afisare();
}
void deplasare(int abcisa, int ordonata)
{
x+= abcisa;
y+= ordonata;
}
Programare orientată pe obiecte C++/Java 14.10.2013
4. Pointeri catre membrii unei clase
34
int main(void)
{
pozitie p(1,1); // declarare obiect
pozitie *pointer; // declarare pointer catre un obiect
int pozitie::x_pointer, pozitie::y_pointer;
void (pozitie::*pointer_functie)(int,int); //
declarare pointer catre o functie din clasa resp.
pointer=&p; // initializarea pointerului resp. cu adresa
obiectului pe care il prelucreaza
x_pointer=&pozitie::x; // initializarea var. din pointer
cu adresa unei informatii din interiorul clasei
y_pointer=&pozitie::y; // initializarea var. din pointer
cu adresa unei informatii din interiorul clasei
Programare orientată pe obiecte C++/Java 14.10.2013
4. Pointeri catre membrii unei clase
36
pointer_functie=pozitie::deplasare;
(p.pointer_functie)(10,10);
cout<<"Noua pozitie este : ";
cout<<"("<<p.x_pointer<<","<<p.y_pointer
<<")\n";
(p.pointer_functie)(10,10);
cout<<"Noua pozitie este : ";
cout<<"("<<p.x_pointer<<","<<p.y_pointer
<<")\n";
}
Problema rezolvata
Tablouri de dimensiune
variabila
Urmatoarea problema rezolvata
prezinta o modalitate de creare a
unor tablouri de dimensiuni
variabile.
Programare orientată pe obiecte C++/Java 14.10.2013
4. Pointeri catre membrii unei clase
38
#include<iostream.h>
#include<process.h>
#include<conio.h>
class array{
int *pointer; // pointer la tablou=array
int dimensiune; // dimensiunea tabloului
void print(void); // afiseaza tabloulul
void test(void *); // testeaza daca s-a alocat corect
memoria
public:
array(int); //constructor
~array(void) //destructor
{
delete[dimensiune] pointer;
}
void concatenare(array &);
//metoda(procedura) de concatenare
int cauta(array &); // metoda pentru
cautarea unui element
};
Programare orientată pe obiecte C++/Java 14.10.2013
4. Pointeri catre membrii unei clase
41
// procedura de test
// Testeaza valoarea unui pointer pentru care s-a alocat
dinamic memorie.
// Daca pointer-ul este setat la NULL inseamna ca
operatia de alocare dinamica a memoriei nu s-a
efectuat corect
void array::test(void *p)
{
if(p==NULL)
{
cout<<"Memorie insuficienta\n";
exit(1);
}
}
Programare orientată pe obiecte C++/Java 14.10.2013
4. Pointeri catre membrii unei clase
42
// se creeaza un tablou de intregi cu "numar_elem" elemente.
// Initializarea tabloului cu valori citite de la tastatura.
array::array(int numar_elem)
{
cout<<endl;
cout<<"Introduceti "<<numar_elem<<" numere
intregi\n";
// alocarea dinamica a memoriei necesare tabloului
dimensiune=numar_elem;
pointer=new int[numar_elem];
// initializare tablou
for(int i=0;i<numar_elem;i++) cin>>pointer[i];
// tiparire tablou
print();
}
int main(void)
{
array a(6);
array b(4);
int i;
cout<<endl;
cout<<"Introduceti dimensiunea tabloului = ";
cin>>i;
cout<<endl;
array c(i);
a.concatenare(b);
a.concatenare(c);
}
Programare orientată pe obiecte C++/Java 14.10.2013
4. Pointeri catre membrii unei clase
47
Aplicaţie rezolvată
Să se definească tipul abstract de date
complex care să aibă funcţii membru
pentru:
1. modulul unui numar complex
2. accesul la partea reală și imaginară a
obiectelor de tip complex
3. afișarea obiectelor complexe
4. constructori pentru inițializare și copiere
#include<iostream.h>
#include<math.h>
#define PI 3.14159265358979
class complex
{
// date membru protejate(private)
double real;
double imag;
complex::complex(double x, double y)
{
real = x;
imag = y;
}
complex::complex(const complex &z)
{
real = z.real;
imag = z.imag;
}
double complex::modul()
{
return sqrt(real * real + imag * imag);
}
void complex::afiscomplex()
{
cout<<real<<" + i * "<<imag;
}
int main(void)
{
double x, y, sumax = 0, sumay = 0, i = 0, n;
cout<<"Dati numarul de nr. complexe n = ";
cin>>n;
while(i<n)
{
cout<<"Partea reala = "; cin>>x;
cout<<"Partea imaginara = "; cin>>y;
sumax+=x;
sumay+=y;
Programare orientată pe obiecte C++/Java 14.10.2013
Exemplu de aplicaţie
55
Întrebări?