Sa se implementeze clasa Student in care sa se exemplifice utilizarea functilor si datelor membre statice.
1 #include <iostream> #include <conio.h> #include <string.h> 5 using namespace std; class Student{ private: int idObiect; 10 char *nume; float media; static float MEDIE_MINIMA_BURSA; //retine media minima de la care se ia bursa static int ultimulIdGen; //utilizat pentru a genera id-uri unice pentru obiectele create. static int genereazaId(); 15 public: /** constructor implicit*/ Student(); /** constructor cu parametri*/ Student(char *nume, float media=0); 20 /** Constructor de copiere*/ Student(const Student &s); ~Student(); void setNume(char *nume); char* getNume(); 25 void setMedia(float media); float getMedia(); void afisare(); int isBursier(); 30 }; float Student::MEDIE_MINIMA_BURSA = 8.50; int Student::ultimulIdGen =0; 35 int Student::genereazaId() { return ++ultimulIdGen; } 40 Student::Student(){ idObiect = genereazaId(); nume = NULL; media = 0; cout<<"Apel constructor implicit. Construit obiectul cu id-ul "<<idObiect<<endl; 45 } Student::Student(char *nume, float media){ idObiect = genereazaId(); if (nume != NULL){ 50 this -> nume = new char[strlen(nume)+1]; strcpy(this -> nume, nume); } else { this -> nume = NULL; } 55 this -> media = media; cout<<"Apel constructor cu parametri. Construit obiectul cu id-ul "<<idObiect<<endl; } Student::Student(const Student &s){ 60 idObiect = genereazaId(); if (s.nume != NULL){ nume = new char[strlen(s.nume)+1]; strcpy(nume, s.nume); } else { 65 nume = NULL; } media = s.media; cout<<"Constructor de copiere.Construit obiectul cu id-ul "<<idObiect<< " copie a ob. cu id-ul " <<s.idObiect<<endl; } 70 Student::~Student(){ if (nume != NULL){ delete nume; } 75 nume = NULL; cout<<"Apel destructor. Distrus obiectul cu id-ul "<<idObiect<<endl; } void Student::setNume(char *nume){ if (nume != NULL){ 80 if (this-> nume != NULL){ if (strlen(nume)> strlen(this->nume)){ delete this -> nume; this -> nume = new char[strlen(nume)+1]; } 85 } else { this -> nume = new char[strlen(nume)+1]; } strcpy(this -> nume, nume); } else { 90 // noul nume este null si deci si nume al obiectului curent va deveni null if (this -> nume != NULL){ delete nume; } this -> nume = NULL; 95 } } void Student::setMedia(float media){ this -> media = media; 100 } float Student::getMedia(){ return media; } 105 void Student::afisare(){ cout<<"ID:" << idObiect << endl; cout<<"Nume:" << (nume == NULL? "Necunoscut":nume) <<endl; cout<<"Media:" << media << endl; 110 cout<<"Bursier:" << (isBursier()?"da":"nu")<<endl; } int Student::isBursier(){ return media>MEDIE_MINIMA_BURSA; 115 } Student test(Student p){ cout<< "In functia test"<<endl; return p; } 120 int main(){ cout<<"Aloc un tablou cu doua elemente"<<endl; Student *s =new Student[2]; cout<<"Dupa alocarea de tablou"<<endl; 125 s[0].afisare(); s[1].afisare(); cout<<"Eliberez tabloul"<<endl; delete []s; cout<<"Construiesc un nou obiect"<<endl; 130 Student s2("Popescu"); s2.afisare(); s2.setMedia(9); s2.afisare(); cout<<"Construiesc un nou obiect pe baza altuia"<<endl; 135 Student s3=s2; s3.setNume("Gigi"); s3.afisare(); s2.afisare(); cout<<"Apelez functia test"<<endl; 140 Student s4=test(s2); cout<<"Revenire din functia test"<<endl; s4.afisare(); getch(); }
In urma rularii programului se obtine urmatorul output:
Aloc un tablou cu doua elemente Apel constructor implicit. Construit obiectul cu id-ul 1 Apel constructor implicit. Construit obiectul cu id-ul 2 Dupa alocarea de tablou ID:1 Nume:Necunoscut Media:0 Bursier:nu ID:2 Nume:Necunoscut Media:0 Bursier:nu Eliberez tabloul Apel destructor. Distrus obiectul cu id-ul 2 Apel destructor. Distrus obiectul cu id-ul 1 Construiesc un nou obiect Apel constructor cu parametri. Construit obiectul cu id-ul 3 ID:3 Nume:Popescu Media:0 Bursier:nu ID:3 Nume:Popescu Media:9 Bursier:da Construiesc un nou obiect pe baza altuia Constructor de copiere.Construit obiectul cu id-ul 4 copie a ob. cu id-ul 3 ID:4 Nume:Gigi Media:9 Bursier:da ID:3 Nume:Popescu Media:9 Bursier:da Apelez functia test Constructor de copiere.Construit obiectul cu id-ul 5 copie a ob. cu id-ul 3 In functia test Constructor de copiere.Construit obiectul cu id-ul 6 copie a ob. cu id-ul 5 Apel destructor. Distrus obiectul cu id-ul 5 Revenire din functia test ID:6 Nume:Popescu Media:9 Bursier:da Apel destructor. Distrus obiectul cu id-ul 6 Apel destructor. Distrus obiectul cu id-ul 4 Apel destructor. Distrus obiectul cu id-ul 3