Documente Academic
Documente Profesional
Documente Cultură
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
© 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
© 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
© 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
© 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
© 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ă.