lab1_poo1
DESCRIPTION
c++TRANSCRIPT
-
1
MINISTERUL EDUCAIEI I TINERETULUI AL R.MOLDOVA
Colegiul Politehnic din Chiinu
Catedra Sisteme Informaionale
La disciplina
Programarea oroentat pe obiecte 1
prof. Pnzaru Zinaida
Chiinu 2015
-
2
Cerinele coninutului lucrrii de laborator:
1. Formularea problemei (condiia);
2. Scopul lucrrii;
3. Listingul programului (programul limbajul C++);
4. Rezultatul (cel puin 2 compilri cu introducerea diferitor date);
5. Concluzie:
a. generalizare la tema (2- 3 fraze);
b. explicaia programului (1 -2 fraze);
c. Analiza rezultatelor (1 -2 fraze).
Not: Punctele 3,4 se vor repeta pentru mai multe probleme rezolvate
-
3
MODEL FOAIE DE TITLU
MINISTERUL EDUCAIEI AL R. MOLDOVA
Colegiul Politehnic din Chiinu
Catedra Sisteme Informaionale
LUCRARE DE LABORATOR NR.1
La Programarea orientat pe obiecte 1
VARIANTA 4
Tema: Elaborarea claselor n limbajul C++
Data ______________
_____________ (semntura prof.)
__________________
(semntura elev.)
A efectuat elevul gr. I ____
Nume, Prenume
A verificat prof.
Pnzaru Zinaida
Chiinu 2015
-
4
Lucrare de laborator Nr.1
Tema: Clase n limbajul C++ Scopul lucrrii:
1. nsuirea noilor elemente de baz ale limbajului C++;
2. Cunoaterea, definirea: claselor n limbajul C++;
3. Compunerea i punerea n execuie a programelor C++ ce utilizeaz clase.
Consideraii teoretice necesare: Clasa reprezinta o metoda logica de organizare a datelor si functiilor unei aceleasi familii.
FG: class class_name
{
[private] date metode;
[protected] date metode;
[public] date metode;
}
Public - Membrul este accesibil de oriunde
protected - Membrul este accesibil oricrui membru al clasei care-l conine i a claselor
derivate
private - Modificator implicit. Accesibil permis doar pentru clasa care-l conine
Exemplu:Un nr complex cuprinde:
- partea reala x
- partea imaginara y
- o functie care returneaza modulul class complex
{public:
float x,y;
float modul();}; float complex::modul()
{return sqrt(x*x+y*y);}
Crearea obiectelor: complex z1,z2;
Adresarea datelor si metodelor obiectului se utilizeaza .
Ex: z1.x
z1.y
z1.modul()
Un obiect este o dat de un tip definit printr-o clas. Se
spune c obiectul este o instaniere a clasei respective.
Formatul declaratiei unui obiect: nume_clas nume_obiect;
#include
#include
-
5
class complex
{public:
float x,y;
float modul();};
float complex::modul()
{return sqrt(x*x+y*y);
}void main()
{Complex z;
z.x=3;z.y=4;
cout
-
6
unsigned GetX();
unsigned GetY();
void SetX(unsigned X);
void SetY(unsigned Y);
};
unsigned Point::GetX()
{
return x;
}
unsigned Point::GetY()
{
return y;
}
void Point::SetX(unsigned X)
{
x = X;
}
void Point::SetY(unsigned Y)
{
y = Y;
}
Am folosit un operator nou, specific C++, ::, numit operator de rezolutie, numit si operator
de acces sau de domeniu. El permite accesul la un identificator, dintr-un bloc in care acesta
nu este vizibil datorita unei alte declaratii locale. Un exemplu de folosire este urmatorul:
char *sir = "variabila globala";
void functie()
{
char *sir = "variabila locala";
printf("%s\n", ::sir); // afiseaza variabila globala
printf("%s\n", sir); // afiseaza variabila locala
}
Pentru definitiile functiilor membre aflate in afara declaratiei clasei este necesara specificarea
numelui clasei urmat de acest operator, indicand faptul ca functia are acelasi domeniu cu
declaratia clasei respective si este membra a ei, desi este definita in afara declaratiei.
Crearea si distrugerea obiectelor
Sa consideram urmatorul program C++:
void main()
{
Point p;
}
In momentul definirii variabilei p, va fi alocat automat spatiul de memorie necesar, acesta
fiind eliberat la terminarea programului. In exemplul de mai sus, variabila p este de tip static.
In continuare vom modifica acest program pentru a folosi o variabila dinamica (pointer).
-
7
void main()
{
Point *p;
p = new Point;
p->x = 5;
p->y = 10;
printf("Aria = %d\n", p->Aria());
delete p;
}
Ati observat utilizarea unor operatori pe care nu ii cunoasteti din limbajul C: new si delete.
C++ introduce o metoda noua pentru gestiunea dinamica a memoriei, similara celei utilizate
in C (malloc() si free()), dar superioara si special construita pentru programarea orientata pe
obiecte. Operatorul new este folosit pentru alocarea memoriei, iar sintaxa acestuia este:
variabila = new tip;
variabila = new tip(valoare_initiala);
variabila = new tip[n];
Este usor de intuit ca prima varianta aloca spatiu pentru variabila dar nu o initializeaza, a
doua varianta ii aloca spatiu si o initializeaza cu valoarea specificata, iar a treia aloca un
tablou de dimensiune n. Acest operator furnizeaza ca rezultat un pointer continand adresa
zonei de memorie alocate, in caz de succes, sau un pointer cu valoarea NULL (practic 0)
atunci cand alocarea nu a reusit.
Eliminarea unei variabile dinamice si eliberarea zonei de memorie aferente se realizeaza cu
ajutorul operatorului delete. Sintaxa acestuia este: delete variabila;
Desi acesti doi operatori ofera metode flexibile de gestionare a obiectelor, exista situatii in
care aceasta nu rezolva toate problemele (de exemplu obiectele care necesita alocarea unor
variabile dinamice in momentul crearii lor). De aceea pentru crearea si distrugerea obiectelor
in C++ se folosesc niste functii membre speciale, numite constructori si destructori.
Constructorul este apelat automat la instantierea unei clase, fie ea statica sau dinamica.
Destructorul este apelat automat la eliminarea unui obiect, la incheierea timpului de viata in
cazul static, sau la apelul unui delete in cazul dinamic.
Din punct de vedere cronologic, constructorul este apelat dupa alocarea memoriei necesare,
deci in faza finala a crearii obiectului, iar destructorul inaintea eliberarii memoriei aferente,
deci in faza initiala a distrugerii sale.
Constructorii si destructorii se declara si se definesc similar cu celelalte functii membre, dar
prezinta o serie de caracteristici specifice:
numele lor coincide cu numele clasei careia ii apartin; destructorii se disting de
constructori prin faptul ca numele lor este precedat de caracterul ~
nu pot returna nici un rezultat
nu se pot utiliza pointeri catre constructori sau destructori
constructorii pot avea parametri, destructorii insa nu. Un constructor fara parametri poarta
denumirea de constructor implicit.
De remarcat este faptul ca in cazul in care o clasa nu dispune de constructori sau destructori,
compilatorul de C++ genereaza automat un constructor respectiv destructor implicit.
Sa completam in continuare clasa Point cu un constructor si un destructor:
Point::Point()
-
8
// constructor implicit
{
x = 0;
y = 0;
}
Point::Point(unsigned X, unsigned Y)
{
x = X;
y = Y;
}
Point::~Point()
{
}
Ati remarcat cu aceasta ocazie modul de marcare a comentariilor in C++: tot ce se afla dupa
caracterul // este considerat comentariu.
De notat este faptul ca definitii de forma
Point p;
sau
Point *p = new Point();
duc la apelarea constructorului implicit.
O intrebare care poate apare este motivul pentru care am realizat functiile GetX(), GetY(),
SetX(), SetY(), cand puteam utiliza direct variabilele membru x si y. Deoarece una din regulile
programarii C++, adoptata in general de catre specialisti, este de a proteja variabilele
membru (veti afla in capitolul urmator cum), acestea neputand fi accesate decat prin
intermediul unor functii, care au rolul de metode de prelucrare a datelor incapsulate in
interiorul clasei.
Probleme propusepentru lucrrea de laborator:
-
9