Sunteți pe pagina 1din 19

Curs 03

CLASE
Definire, atribute, metode
Enumerațiile

● Construcții ce permit crearea unui tip de dată ce acceptă valori doar dintr-un
interval finit dat
● Exemple: culori, zilele săptămânii, lunile anului, etc
● La compilare sunt transformate în constante întregi
● Ajută la evitarea unor erori de execuție și dau o mai mare lizibilitate codului sursă

© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Exemple

//definire
enum culoare { rosu, galben, albastru };
enum ziLibera { luni = 1, miercuri = 3, vineri = 5 };

//utilizare
culoare c = culoare::rosu;
ziLibera zi = ziLibera::miercuri;
zi = (ziLibera)5;

© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Uniunea

● Reprezintă un tip de dată ce poate salva o singură valoare la un moment dat


dintre mai multe valori posibile
● Uniunea ocupă un spațiu în memorie echivalent cu spațiul ocupat de cel mai
mare dintre tipurile definite în interiorul ei
● Zona respectivă de memorie este interpretată apoi în funcție de tipul cerut dintre
cele definite

© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Exemplu
//definire
union Eticheta
{
short v1;
int v2;
long long v3;
};

//utilizare
|union| Eticheta eticheta;
eticheta.v3 = 9999999;
printf("%lld\n", eticheta.v3); printf("%d\n", eticheta.v1); printf("%d\n", eticheta.v2);
eticheta.v2 = 7;
printf("%lld\n", eticheta.v3); printf("%d\n", eticheta.v1); printf("%d\n", eticheta.v2);

© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Structurile

● Construcții ce permit crearea unui tip de dată complex ce grupează mai multe
caracteristici ale unei entități din lumea reală
● Implementează o formă incipientă de încapsulare
● Permit prelucrarea unitară a unei entități
● În C permit doar declararea de atribute (câmpuri, proprietăți) aferente acelei
entități (mai multe detalii despre C++ imediat)

© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Exemplu
//definire
|typedef| struct Carte
{
int numarPagini;
float pret;
char* denumire;
char* autor;
};
//utilizare
|struct| Carte carte; carte.numarPagini = 200; carte.pret = 99.99;
carte.denumire = nullptr; printf("%s", carte.denumire);

© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Clasele

● Entități asemănătoare structurilor ce încapsulează caracteristici (sub formă de


atribute) și comportamente (sub formă de metode) prin abstractizarea entităților
din lumea reală
● Sunt baza Programării Orientate Obiect (sau Orientată pe Obiecte)
● Permit crearea de tipuri de date noi

© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Definire

class nume_clasa
{
//atribute si metode
};

© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Atribute

class TelefonMobil
{
string producator;
string model;
float nivelBaterie;
//...
};

© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Metode
class TelefonMobil
{
float nivelBaterie;
//...
void incarca(float nivelIncarcare)
{
nivelBaterie += nivelIncarcare;
}
};

© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Tipuri speciale de metode

● Constructorii
● Destructorii
● Funcțiile de acces

Mai multe detalii despre fiecare în cursurile viitoare.

© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Obiectele

● Instanțele unei clase (variabilele de tipul unei clase) se numesc obiecte, de aici și
denumirea paradigmei - Programare Orientată Obiect
● O clasă (cu anumite excepții gândite special în acest sens) poate avea oricâte
instanțe
● Diferența dintre o clasă și un obiect e asemănătoare cu diferența dintre o formă
de prăjituri și prăjiturile realizate cu acea formă

© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Crearea de obiecte

int main()
{
TelefonMobil telefonPersonal;
TelefonMobil telefonDeServiciu;
};

© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Folosirea atributelor și metodelor

int main()
{
TelefonMobil telefonPersonal;
telefonPersonal.nivelBaterie = 20;
telefonPersonal.incarca(50);
cout << telefonPersonal.nivelBaterie; //va afisa 70
}

© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Domenii de vizibilitate

● privat (private) - membrii (atributele și metodele) definiți în această zonă pot fi


accesați doar de clasa în care sunt definiți - domeniu implicit
● protejat (protected) - membrii definiți în această zonă de vizibilitate pot fi
accesați doar de clasa în care sunt definiți și de clasele derivate din ea (ce o
moștenesc - mai multe detalii despre derivare în cursurile viitoare)
● public (public) - membrii definiți în această zonă de vizibilitate pot fi accesați de
orice entitate (clasa respectivă, clasele derivate, alte clase, funcția main, etc.)

© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Utilizare domenii de vizibilitate
class TelefonMobil
{
public:
float nivelBaterie;
void incarca(float nivelIncarcare)
{
nivelBaterie += nivelIncarcare;
}
private:
string model;
protected:
string producator;
};

© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Domenii de vizibilitate

● Membrii ce sunt definiți în zona publică spunem, de obicei, că formează interfața


clasei (modalitatea prin care clasa comunică cu exteriorul)
● A nu se confunda interfața clasei cu noțiunea de interfață (interface - clasă
abstractă ce conține doar metode virtuale pure, despre care vom discuta în unul
din cursurile viitoare)

© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.
Precizare

În C++ singura diferență practică dintre clase (class) și structuri (struct) este
dată de faptul că în structuri vizibilitatea implicită este cea publică!

Cu toate acestea între cele două tipuri de entități există o diferență la nivel de
concept: structurile se utilizează pentru construcții simple, pe când clasele
pentru cele cu o complexitate ridicată.

A nu se confunda structurile și clasele din C++ cu cele din alte limbaje (ex: C#)!

© 2020-2023 Bogdan Iancu. Reproducere integrală sau parțială a acestor materiale fără acordul autorului este strict interzisă.

S-ar putea să vă placă și