Documente Academic
Documente Profesional
Documente Cultură
Lucrare de laborator 1
Tema: Realizarea claselor n Visual C++
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);
scriem
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:
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;
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; }
_getch(); }
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.