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