Sunteți pe pagina 1din 9

MINISTERUL EDUCAIEI AL REPUBLICII MOLDOVA UNIVERSITATEA DE STAT DIN MOLDOVA

FACULTATEA DE FIZIC I INGINERIE


CATEDRA FIZIC APLICAT I INFORMATIC

Lucrare de laborator 1
Tema: Realizarea claselor n Visual C++

Efectuat: studentul grupei 3.2 TI

Verificat: lect.universitar

nsrcinarea
1. Adugai proiectului o clas denumit "om" (Class View / New Class, de tip Generic Class). Un obiect aparinnd clasei om va avea trei membri date: nume, h i g (numele, nlimea i greutatea). Adugarea membrilor clasei se va realiza selectind n meniul contextual care se afieaz la selectarea clasei cu m.b. drept opiunea AddMemberVariable sau AddMemberFunction, dup caz. Soluie: Fiierul om.h
class om { char*nume; floath,g ; public: void creare(char *, float,float); char*da nume(); voidinu me(char*); floatdah (); void ih(float); floatdag (); voidig( float); }; Fiierul om.cpp #include <string.h> #include "om.h" void om::creare(char *num, float in, float gr) { nume=num; h=in; g=gr; } char * om::danume() { returnnu me; } void om::inume(char *num) { nume = num; } float om::dah() { returnh; } void om::ih(float a) { h=a; } ... (idem dag() si ig())

Fiierul Lab1.cpp
#include <iostream.h>

#include "om.h" main() { omVa sile,Ioa n; Vasile.creare("Vasile", 1.7 8, 88) ; Ioan.creare("Ioan", 1.8 2, 91) ; cout << "Numele:" << Vasile.danume() << "\nInaltimea: " << Vasile.dah()<< endl; }

2. ncercai s modificai valoarea nlimii unuia dintre obiectele create folosind o simpl atribuire: Ioan.g = 87; 3 Merge?De ce? 3. Scriei pentru clasa creat doi constructori: unul fr parametri i unul care s nlocuiasc funcia creare(). 4. Creai un obiect folosind alocarea dinamic a memoriei. 5. Adugai clasei funcia afiez() care scrie toate caracteristicile obiectului pentru care a fost apelat. 6. Adugai clasei funcia coincide() care permite verificarea coincidenei a dou obiecte. Se va testa coincidena nlimii i greutii. 7. Adugai folosind ClassView o clas suplimentar, nod, avind membrii: Fiierul nod.h
class nod { omo; nod*no durm; public: nod(om); ~nod(); };

Adugai n programul principal declaraiile: nod primul; nod * nodcurent; i creai un nod pentru Vasile i un nod pentru Ioan apelind constructorul clasei. Generalizai programul principal astfel ncit s permit crearea unei liste simple de nume. Numele i caracteristicile persoanei vor fi citite de la tastatur. Dup ncheierea introducerii listei (marcat prin introducerea unui ir de caractere vid n locul numelui) parcurgei lista i afiai pe ecran numele persoanelor din list.

Fiierul om.h
class om { char *nume; //membri implicit privai: pointerul nume la datele tipul char float h,g; //h,g de tip float pentru nlime i greutate public: //declararea funciilor de tipul public void creare(char *,float,float);//creare cu parametrii:pointer la un ir de caractere i //dou mrimi de tip float.Creeaz un obiect nou al c lasei om,avnd parametrii. char *danume(); //danume-care returneaz pointer ctre date de tip char void inume(char *); //inume-cu parametruluchar * float dah(); //dah-returneaz valoare de tip real void ih(float); //ih-funcie cu parametrul de tip real,nu ntoarce valori float dag(); //dag()-funcie fr parametri,ntoarce valoare de tip real void ig(float); //ig-funcie cu parametru de tip real,nu ntoarce valori };

----------------------------------------------------------------------------------------------------------------------------------

Fiierul om.cpp
#include "StdAfx.h" #include "om.h" #include <string.h> void om::creare(char *num,float in,float gr) //descrierea funciei crearea clasei om ,cu //parametrii *num-pointer la un ir,in i gr-valori de tip float { nume=num; //membrului nume i se atribuie valoarea pointat de num( irul num) h=in //atribuie membrilor h i g valorile parametrilor in,respectiv gr g=gr; } char* om::danume() //descrierea funciei danume() ce returneaz un ir caracterial { return nume; //returneaz valoarea membrului nume al obiectului curent } void om::inume(char *num) //funcie cu parametrul *num de tip pointer la un ir { nume=num; //membrului nume i se atribuie valoareanum } float om::dah() //funcia dah() care ntoarce o valoare de tip float { return h; //ntoarce valoarea membrului h a obiectului curent om } void om::ih(float a) //funcia ih cu parametrul a de tip float { h=a; //membrului h al obiectului i se atribuie valoarea a } float om::dag() //funcia dag() care ntoarce valoarea membrului g a obiectului { return g; } void om::ig(float b) //funcia ig care atribuie membrului g valoarea parametrului b { g=b; };

Am folosit header-ele string.h pentru lucrul cu irurile de caractere i om.h pentru descrierea funciilor-metode ale clasei om declarate n fiierul om.h. --------------------------------------------------------------------------------------------------------------------Fiierul Lab1.cpp
#include "StdAfx.h" #include <iostream> #include "om.h" #include <conio.h> using namespace std; void main() //Includem fiierul iostream //fiierul header om.h //conio.h pentru afiarea consolei //folosete std pentru funciile cout,endl,cin //Funcia main() a programului

{ om Vasile,Ioan; Vasile.creare("Vasile",1.78,88);

//Instanele Vasile,Ioan ale clasei om //apelarea metodei creare pentru obiectul Vasile cu //parametrii Vasile,1.78,88.

Ioan.creare("Ioan",1.82,91); cout<<"Numele:"<<Vasile.danume()<<"\nInaltimea:"<<Vasile.dah()<<\nGreutatea:<<Vasile.da g()<<endl; //Afiarea mesajului Numele: urmat de valoarea ntoars de metoda //danume() pentru Vasile.Din rnd nou afieaz Inaltimea: urmat de //valoarea ntoars de metoda dah() pentru Vasile i Greutatea: u rmat de valoarea intoarsa de //metoda dag() _getch(); }

Pentru a depana programul principal alegem din meniul Debug opiunea Start Debugging sau Start Without Debugging.

ncercai s modificai valoarea nlimii unuia dintre obiectele create folosind o simpl atribuire: Ioan.g=87 Merge?De ce? Nu va merge deoarece data membru g a clasei om nu e declarat cu nici un specificator de acces,iar tipul implicit este private.Membrii declarai private nu pot fi accesai direct,fiind accesibil doar n cadrul funciilor(metode) clasei i n interiorul clasei. Scriei pentru clasa creat doi constructori:unul fr parametri i unul care s nlocuiasc funcia creare(). Vom scrie codul pentru constructori n fiierul om.cpp. Constructorul implicit:
om::om() //descrierea constructorului implicit al clasei om { this->nume=Numele; //valoarea implicit e atribuit membrului nume this->h=1.65; //valoarea implicit e atribuit membrului h this->g=65; //valoarea implicit e atribuit membrului }

Dup crearea obiectelor Ioan i Vasile,apelul metodelor Vasile.danume(),Vasile.dah() , Vasile.dag(),Ioan.danume(),Ioan.dah(),Ioan.dag() va afia aceleai valori:
Rezultatul:

Analogul funciei creare(). - n fiierul om.h n loc de prototipul funciei creare() scriem prototipul constructorului: om(char *,float,float);

n fiierul om.cpp descriem constructorul cu parametri

om::om(char *n,float i,float m) {this->nume=n; this->h=i this->g=m; }

scriem

n fiierul Lab1.cpp n loc de rndurile:

om Vasile,Ioan; Vasile.creare("Vasile",1.78,88); Ioan.creare("Ioan",1.82,91); om Vasile("Vasile",1.78,88); om Ioan("Ioan",1.82,91); cout<<"Numele:"<<Vasile.danume()<<"\nInaltimea:"<<Vasile.dah()<<\nGreutatea: <<Vasile.dag()<<endl; cout<<"Numele:"<<Ioan.danume()<<"\nInaltimea:"<<Ioan.dah()<<\nGreutatea:<<I oan.dag()<<endl; Rezultatul:

Creai un obiect folosind alocarea dinamic a memoriei.


Pentru a crea un obiect cu alocarea dinamic a memoriei vom folosi sintaxa: Nume_clasa *p_Obiect=new Constructor_cu_parametri (Nume_clasa(lista_parametri)) Dup creare i utilizare,obiectul creat cu alocarea dinamic de memorie poate fi ters cu ajutorul funciei delete nume_obiect. Codul modificat al fiierului Lab1.cpp
#include<iostream> #include"om.h" #include<conio.h> usingnamespace std; void main() { om Vasile("Vasile",1.78,88); om Ioan("Ioan",1.82,91); cout<<"Numele:"<<Vasile.danume()<<"\nInaltimea:"<<Vasile.dah()<<\nGreutatea: <<Vasile.dag()<<endl; cout<<"Numele:"<<Ioan.danume()<<"\nInaltimea:"<<Ioan.dah()<<\nGreutatea:<<I oan.dag()<<endl; om *Monica=new om("Monica",1.65,50);
memorie //exemplu de creare cu alocarea dinamic de

cout<<"Numele:"<<Monica->danume()<<"\nInaltimea:"<<Monica>dah()<<\nGreutatea:<<Monica->dag()<<endl; //apelarea funciilor danume() i dah() de ctre obiectul pointat. delete Monica; //tergerea obiectului creat cu new i eliberarea memoriei _getch();}

Adugai clasei funcia afisez() care scrie toate caracteristicile obiectului pentru care a fost apelat.
n fiierul om.h adugm prototipul funciei afisez() ca funcie public.

n fiierul om.cpp descriem funcia: void afisez(); //funcia va ndeplini instruciunile de afiare,fr returnarea valorilor. {cout<<\nNumele:<<this->danume()<<endl; cout<<Inaltimea:<<this->dah()<<endl; cout<<Greutatea:<<this->dag()<<endl; } Fiierul om.cpp
#include<string.h> #include<iostream> //iostream,conio.h,using namespace std sunt necesare //pentru folosirea instruciunilor cout i endl #include"om.h" #include<conio.h> usingnamespace std; om::om(char *n,float i,float m) {this->nume=n; this->h=i; this->g=m;} char *om::danume() { return nume;} void om::inume(char *num) { nume=num; } float om::dah() { return h; } void om::ih(float a) { h=a; } float om::dag() { return g; } void om::ig(float b) { g=b; } void om::afisez() { cout<<"\n Numele:"<<this->nume<<endl;//afiarea membrului nume al obiectului curent cout<<"Inaltimea:"<<this->h<<endl; cout<<"Greutatea:"<<this->g<<endl; }

Modificm fiierul Lab1.cpp adugnd liniile Ioan.afisez() i Vasile.afisez() pentru a verifica funcia.
#include<iostream> #include"om.h" #include<conio.h> usingnamespace std; void main() { system("color f0"); om Vasile("Vasile",1.78,88); om Ioan("Ioan",1.82,91); cout<<"Numele:"<<Vasile.danume()<<"\nInaltimea:"<<Vasile.dah()<<endl; cout<<"Numele:"<<Ioan.danume()<<"\nInaltimea:"<<Ioan.dah()<<endl;

om *Monica=new om("Monica",1.65,50); cout<<"Numele:"<<Monica->danume()<<"\nInaltimea:"<<Monica->dah()<<endl; delete Monica; Ioan.afisez(); Vasile.afisez(); _getch(); }

Rezultatele funciei afisez():

Adugai clasei funcia coincide() care permite verificarea coincidenei a 2 obiecte.Se va testa coincidena a nlimii i greutii.

Adugm n fiierul om.h rndul void coincide(om) n fiierul om.cpp descriem funcia coincide(om)
void om::coincide(om om1) {if (this->h==om1.h) //dac nlime h obiectelor om1 i obiectul curent coincid este //afiat c obiectele au aceeai nlime. cout<<this->nume<<" si "<<om1.nume<<" au aceeasi inaltime."<<endl; else cout<<this->nume<<" si "<<om1.nume<<" au inaltimi diferite."<<endl; //n caz contrar e afiat un mesaj c obiectele au nlimi diferite. if (this->g==om1.g) cout<<this->nume<<" si "<<om1.nume<<" au aceeasi greutate."<<endl; else cout<<this->nume<<" si "<<om1.nume<<" au greutati diferite."<<endl; }

Adugm implementarea funciei n programul principal al fiierului Lab1.cpp


#include<iostream> #include"om.h" #include<conio.h> usingnamespace std; void main() { om Vasile("Vasile",1.78,88); om Ioan("Ioan",1.82,91); cout<<"Numele:"<<Vasile.danume()<<"\nInaltimea:"<<Vasile.dah()<<endl; cout<<"Numele:"<<Ioan.danume()<<"\nInaltimea:"<<Ioan.dah()<<endl; om *Monica=new om("Monica",1.65,50); cout<<"Numele:"<<Monica->danume()<<"\nInaltimea:"<<Monica->dah()<<endl; delete Monica; Ioan.afisez(); Vasile.afisez(); Vasile.coincide(Vasile); Vasile.coincide(Ioan); Ioan.coincide(Vasile);

_getch(); }

Rezultatele implementrilor cu diferii parametri a funciei coincide():

Concluzii:
La elaborarea acestei lucrri de laborator in limbajul de programare Visual C++ am realizat clasa i constructorii(implicit,cu parametri i de clonare) cu ajutorul crora am creat obiecte.

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