Sunteți pe pagina 1din 6

MINISTERUL EDUCAIEI AL REPUBLICII MOLDOVA

UNIVERSITATEA TEHNIC A MOLDOVEI


CATEDRA DE MICROELECTRONIC I INGINERIE BIOMEDICAL

RAPORT
Lucrarea de laborator Nr.4
la Programarea n C++
Tema: Motenirea i compoziia

A efectuat:

st. gr. ISBM-131 Moroi Ion

A verificat:

Balan Mihaela

Chiinu, 2014

Scopul lucrrii:
studierea motenirii, avantajele i dezavantajele;
studierea compoziiei;
studierea regulilor de definire a motenirii i compoziiei;
studierea formelor de motenire;
studierea iniializatorilor;
principiul de substituie;
motenirea i compoziia ce s alegem.

Noiuni teoretice
Definirea i utilizarea motenirii:
Motenirea se desemneaz prin indicarea clasei de baz dup numele clasei derivate, dup
dou puncte. Ca de exemplu:
class Animal{
int NofLegs;
public:
void Say(){ cout<<!!!; }
};
class Dog: public Animal{ // motenirea
...
};
void main(){
Dog d;
d.Say();
}
Din exemplu se vede, c funcia i variabila, sunt definite n clasa Animal sunt importate i
pot fi utilizate de obiectul clasei Dog. Starea, ce complic percepia acestui mecanism, consta din
aceia c, clasa derivat poate sa-i defineasc comportamentul, primit n clasa de baz. (Struul i
pinguinul nu zboar, dei sunt psri, dar ornitoringul depune ou, dei este manifer). Ne vom
ntoarce la aceasta tem n urmtoarele lucrri de laborator.
Principiul de substituiei
Adugnd la cele relatate mai sus, putem spune c, motenirea presupune, c obiectul
clasei derivate poate fi utilizat n locul obiectului de baz:
void main(){
Animal *ptr = new Dog;
}
Din exemplu se vede c sunt indice la clasa de baz deci se ateapt utilizarea obiectului
de baz, dar, indicatorului i se atribuie obiectul derivatei.
Formele motenirii
n relaiile motenirii, C++ este un limbaj foarte bogat, aa cum exist cinci forme diferite
de motenire
Diferite forme de motenire sunt utilizate, pentru a modifica starea accesului pentru
variabilele membre clasei. De exemplu, la utilizarea motenirii nchise, toate care sunt accesibile
(deschise i protejate) variabilele clasei de baz devin nchise n derivare. Dar prin utilizarea
derivrii protejate protejate. Variabilele nchise a clasei de baz prin orice forma de derivare
devin inaccesibile. Mai mult ca att, metodele de motenire, se deosebesc prin aceia, c
motenirea deschis creeaz un subtip de date, adic exist principiul de substituie, dar protejata
i deschisa nu.

Compoziia
Compoziia reprezint nc un mecanism, legat de programarea orientat pe obiecte, care
reprezint relaia dintre obiecte, atunci cnd motenirea este relaia dintre clase.
Motenirea realizeaz relaia a fi is a . Dog este mamifer, iar mamiferul animal.
Compoziia realizeaz relaia de a conine has a . Automobilul conine motor i roi.
Definirea compoziiei
Cu adevrat compoziia este folosit foarte larg, aa cum variabilele ncorporate conin un
tip i sunt utilizate la definirea clasei. Dar la folosirea variabilelor ncorporate nu apar ntrebri,
ceia ce nu se poate spune despre clasele utilizatorilor. Definirea nu este grea, ns utilizarea
constructorilor creeaz probleme.
class Car{
Engine e;
};
Varianta 10
De creat clasa student, care are un nume, specialitate, anul de nvmnt i balul mediu.
Determinai funcia de definire, schimbare a datelor i comparare. Pentru sarcina cmpurilor
textuale se folosete operatorul new. Determinai constructorul, destructorul i alte funcii
necesare. Creai clasa grupa, care conine studeni (o cantitate nelimitat). Definii metodele de
adugare i eliminare a studenilor, determinarea balului mediu pe grup, constructorii,
destructorii i alte funcii necesare.
#include <iostream>
#include <process.h>
#include <conio.h>
#include <string.h>
using namespace std;
int N=0;
float media=0;
class Student {
char *name;
char *spec;
int year;
float med;
public:
Student () : name(NULL), spec(NULL), year(0), med(0) {}
Student (char *n, char*s, int year, float med) :
name(new char[strlen(n)+1]), spec(new char[strlen(s)+1]), year(year), med(med)
{
strcpy(name, n);
strcpy(spec, s);
}
Student (Student &obj) :

name(new char[strlen(obj.name)+1]), spec(new char[strlen(obj.spec)+1]), year(obj.year),


med(obj.med) {
strcpy(name, obj.name);
strcpy(spec, obj.spec);
}
~Student () {
if (name) delete [] name;
if (spec) delete [] spec;
year=0;
med=0;
}
void get_media (Student &obj) {
media=media+obj.med;
}
void adaugare (Student &obj) {
char n[50],s[50];
if (obj.name) delete [] obj.name;
if (obj.spec) delete [] obj.spec;
cout <<"Name: "; cin>>n;
obj.name = new char[strlen(n)+1];
strcpy(obj.name, n);
cout <<"Specialitatea: "; cin>>s;
obj.spec = new char[strlen(s)+1];
strcpy(obj.spec, s);
cout <<"Anul: "; cin>>obj.year;
cout <<"Media: "; cin>>obj.med;
}
friend istream & operator >> (istream & in, Student &obj) {
char n[50],s[50];
if (obj.name) delete [] obj.name;
if (obj.spec) delete [] obj.spec;
cout <<"Name: "; in>>n;
obj.name = new char[strlen(n)+1];
strcpy(obj.name, n);
cout <<"Specialitatea: "; in>>s;
obj.spec = new char[strlen(s)+1];
strcpy(obj.spec, s);
cout <<"Anul: "; in>>obj.year;
cout <<"Media: "; in>>obj.med;
return in;
}
friend ostream & operator << (ostream & out, Student &obj) {
if (!obj.name) out <<"Nu-i nume, nu-i student!";
out <<"Nume: "<<obj.name<<"\nSpecialitate: "<<obj.spec<<"\nAnul:
"<<obj.year<<"\nMedia: "<<obj.med<<endl;
return out;
}

};
class Grupa: public Student {
Student S[50];
public:
Grupa ():S() {}
Grupa (Student *s) {
for (int i=0; i<N; i++)
S[i]=s[i];
}
Grupa (Grupa &obj) {
for (int i=0; i<N; i++)
S[i]=obj.S[i];
}
~Grupa () {}
friend istream & operator >> (istream &in, Grupa&obj) {
cout << "Introduceti informatie despre studenti:\n";
for (int i=0; i<N; i++) {
cout <<"\tNr."<<i+1<<endl;
in>>obj.S[i];
}
return in;
}
friend ostream & operator << (ostream &out, Grupa &obj) {
for (int i=0; i<N; i++) {
cout <<"\tNr."<<i+1<<endl;
out<<obj.S[i];
}
return out;
}
void bal_mediu () {
media=0;
for (int i=0; i<N; i++)
get_media(S[i]);
media=media/N;
cout<<"Media grupei: "<<media<<endl;
getch();
}
void adaugare_student() {
cout <<"\tNr."<<N<<endl;
adaugare(S[N-1]);
}
};
int

main () {

int c, x=1;
Grupa g;
cout <<"Introduceti nr. de studenti: ";
cin >>N;
system ("cls");
cin>>g;
while (x) {
system ("cls");
cout<<"1 - Afisarea informatiei despre studenti\n";
cout<<"2 - Media grupei\n";
cout<<"3 - Adaugarea unui student\n";
cout<<"4 - Stergerea ultimului student\n";
cout<<"0 - Iesire\n";
cin>>c;
switch (c) {
case 1: cout<<g; getch(); break;
case 2: g.bal_mediu(); break;
case 3: N++; g.adaugare_student(); break;
case 4: if (N==0) {cout<<"Nu mai sunt studenti"; getch(); break;}
N--; break;
case 0: x=0; break;
}
}
return 0;
}
Concluzie: Efectund aceast lucrare de laborator am acumulat cunotine noi la tema
Motenirea i compoziia. n cadrul programului am creat clasa Student cu variabile de tip real,
ntreg i caractere, am creat clasa Grupa cu funcii de a aduga, elimina i calculul mediei
studenilor. Efectund aceast lucrare de laborator am nsuit modul de lucru cu motenirea i
compoziia n C++.

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

  • Spargalca
    Spargalca
    Document1 pagină
    Spargalca
    Ion Moroi
    Încă nu există evaluări
  • Lab2 Sevem
    Lab2 Sevem
    Document10 pagini
    Lab2 Sevem
    Ion Moroi
    Încă nu există evaluări
  • Lucrarea de Curs.A
    Lucrarea de Curs.A
    Document13 pagini
    Lucrarea de Curs.A
    Ion Moroi
    Încă nu există evaluări
  • Monitorizarea Stării Unui Led Cu Un Buton
    Monitorizarea Stării Unui Led Cu Un Buton
    Document4 pagini
    Monitorizarea Stării Unui Led Cu Un Buton
    Ion Moroi
    Încă nu există evaluări
  • Lab1 Sevem
    Lab1 Sevem
    Document7 pagini
    Lab1 Sevem
    Ion Moroi
    Încă nu există evaluări
  • Analiza SWOT
    Analiza SWOT
    Document3 pagini
    Analiza SWOT
    Ion Moroi
    Încă nu există evaluări
  • Pmma Examen Raspunsuri
    Pmma Examen Raspunsuri
    Document38 pagini
    Pmma Examen Raspunsuri
    Ion Moroi
    Încă nu există evaluări
  • Lab 1dioda
    Lab 1dioda
    Document4 pagini
    Lab 1dioda
    Ion Moroi
    Încă nu există evaluări
  • Lab 7
    Lab 7
    Document5 pagini
    Lab 7
    Ion Moroi
    Încă nu există evaluări
  • Dmoe Lab 2dm
    Dmoe Lab 2dm
    Document5 pagini
    Dmoe Lab 2dm
    Ion Moroi
    Încă nu există evaluări
  • Lab 5
    Lab 5
    Document5 pagini
    Lab 5
    Ion Moroi
    Încă nu există evaluări
  • Lab 6
    Lab 6
    Document8 pagini
    Lab 6
    Ion Moroi
    Încă nu există evaluări
  • Lab 3
    Lab 3
    Document11 pagini
    Lab 3
    Ion Moroi
    Încă nu există evaluări
  • Lab 2
    Lab 2
    Document20 pagini
    Lab 2
    Ion Moroi
    Încă nu există evaluări
  • Evolutia Marketingului
    Evolutia Marketingului
    Document4 pagini
    Evolutia Marketingului
    Ion Moroi
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document6 pagini
    Lab 1
    Ion Moroi
    Încă nu există evaluări