1. Definirea unei clase și crearea unui obiect
În acest exemplu, vom crea o clasă Masina, vom adăuga atribute și metode, apoi vom crea și utiliza un obiect.
#include <iostream>
using namespace std;
// Definirea clasei
class Masina {
public:
string marca;
string model;
int an;
// Metodă pentru afișarea detaliilor despre mașină
void afiseazaDetalii() {
cout << "Marca: " << marca << ", Model: " << model << ", An: " << an << endl;
}
};
int main() {
Masina masina1; // Crearea unui obiect de tip Masina
// Inițializarea atributelor obiectului
masina1.marca = "Dacia";
masina1.model = "Logan";
masina1.an = 2022;
// Apelarea metodei
masina1.afiseazaDetalii();
return 0;
}
Explicație
- Definim clasa
Masina, cu trei atribute (marca,model,an). - Adăugăm o metodă
afiseazaDetalii()pentru a afișa informațiile despre obiect. - Creăm un obiect
masina1de tipMasinași îi inițializăm valorile. - Apelăm metoda
afiseazaDetalii()pentru a afișa detaliile.
Rezultatul afișat:
Marca: Dacia, Model: Logan, An: 2022
2. Utilizarea unui constructor
Un constructor este o funcție specială care este apelată automat la crearea unui obiect.
#include <iostream>
using namespace std;
class Masina {
public:
string marca;
string model;
int an;
// Constructor care inițializează obiectul
Masina(string m, string mo, int a) {
marca = m;
model = mo;
an = a;
}
void afiseazaDetalii() {
cout << "Marca: " << marca << ", Model: " << model << ", An: " << an << endl;
}
};
int main() {
// Creăm obiecte și le inițializăm direct prin constructor
Masina masina1("Toyota", "Corolla", 2023);
Masina masina2("Ford", "Focus", 2021);
masina1.afiseazaDetalii();
masina2.afiseazaDetalii();
return 0;
}
Explicație
- Adăugăm un constructor care primește trei parametri și inițializează atributele.
- Creăm obiecte
masina1șimasina2, folosind constructorul. - Apelăm metoda
afiseazaDetalii()pentru fiecare obiect.
Rezultatul afișat:
Marca: Toyota, Model: Corolla, An: 2023
Marca: Ford, Model: Focus, An: 2021
3. Membri private și utilizarea getter și setter
Când variabilele sunt private, ele nu pot fi accesate direct din exteriorul clasei. Folosim metode getter și setter pentru a interacționa cu ele.
#include <iostream>
using namespace std;
class Masina {
private:
string marca;
public:
// Setter pentru a seta marca
void setMarca(string m) {
marca = m;
}
// Getter pentru a returna marca
string getMarca() {
return marca;
}
};
int main() {
Masina masina1;
masina1.setMarca("Mercedes");
cout << "Marca masinii: " << masina1.getMarca() << endl;
return 0;
}
Explicație
- Declarăm atributul
marcacaprivate, astfel încât să nu poată fi accesat direct. - Folosim
setMarca()pentru a seta valoarea atributului. - Folosim
getMarca()pentru a obține și afișa valoarea atributului.
Rezultatul afișat:
Marca masinii: Mercedes
4. Moștenirea (Clase derivate)
O clasă poate moșteni atributele și metodele altei clase. În acest exemplu, MasinaSport moștenește Masina.
#include <iostream>
using namespace std;
// Clasa de bază
class Masina {
public:
string marca;
string model;
int an;
void afiseazaDetalii() {
cout << "Marca: " << marca << ", Model: " << model << ", An: " << an << endl;
}
};
// Clasa derivată care moștenește `Masina`
class MasinaSport : public Masina {
public:
int vitezaMaxima;
void afiseazaViteza() {
cout << "Viteza maxima: " << vitezaMaxima << " km/h" << endl;
}
};
int main() {
MasinaSport ferrari;
ferrari.marca = "Ferrari";
ferrari.model = "F8";
ferrari.an = 2022;
ferrari.vitezaMaxima = 340;
ferrari.afiseazaDetalii();
ferrari.afiseazaViteza();
return 0;
}
Explicație
- Clasa
Masinaconține atribute și metodaafiseazaDetalii(). - Clasa
MasinaSportmoșteneșteMasinași adaugă un nou atributvitezaMaximași o metodăafiseazaViteza(). - Obiectul
ferrariare acces la metodele clasei de bază și cele noi din clasa derivată.
Rezultatul afișat:
Marca: Ferrari, Model: F8, An: 2022
Viteza maxima: 340 km/h
5. Destructor (ștergerea automată a obiectelor)
Un destructor este apelat automat la distrugerea unui obiect și este folosit pentru eliberarea resurselor.
#include <iostream>
using namespace std;
class Masina {
public:
string marca;
// Constructor
Masina(string m) {
marca = m;
cout << "Masina " << marca << " a fost creata." << endl;
}
// Destructor
~Masina() {
cout << "Masina " << marca << " a fost distrusa." << endl;
}
};
int main() {
Masina masina1("BMW");
return 0;
}
Explicație
- Constructorul este apelat automat când obiectul
masina1este creat. - Destructorul este apelat automat când programul se termină și obiectul
masina1este distrus.
Rezultatul afișat:
Masina BMW a fost creata.
Masina BMW a fost distrusa.
Concluzie
- Obiectele sunt instanțe ale claselor și pot fi create manual sau prin constructori.
- Accesul la date poate fi controlat prin specificatori (
private,public) și metodegetter/setter. - Moștenirea permite reutilizarea codului între clase.
- Destructorii sunt folosiți pentru curățarea automată a resurselor.
Aceste concepte sunt esențiale în programarea orientată pe obiecte în C++!