Sunteți pe pagina 1din 19

TEMA:PROGRAMAREA ORIENTATA PE OBIECTE

CUPRINS
CONSIDERATII STIINTIFICE
1. CONCEPTE DE BAZA IN POO
1.1. ABSTRACTIZAREA DATELOR.INCAPSULAREA
1.2. MOSTENIREA
1.3. POLIMORFISM
2. CLASE (ADT)
2.1. TIPUL STRUCT:DEFINITIE, EXEMPLE TRECEREA LA TIPUL CLASS
2.2. TIPUL CLASS.DEFINITIE .DATE SI METODE MEMBRE .EXEMPLE
2.3. OBIECTE. MEMBRII UNEI CLASE
2.4. VIZIBILITATEA MEMBRILOR CLASEI(MODURI DE ACCES:PRIVATE,
PROTECTED,PUBLIC)
2.5. FUNCTII MEMBRE(FUNCTII IN-LINE)
2.6. MEMBRII STATICI
3. CONSTRUCTORI SI DESTRUCTORI
3.1. DEFINITIE.EXEMPLE
3.2. TIPURI DE CONSTRUCTORI(IMPLICITI, DE COPIERE, DEFINITI DE
UTILIZATOR).EXEMPLE
4. FUNCTII PRIETENE (FRIEND) .DEFINITIE.EXEMPLE
5. MOSTENIREA
5.1. DEFINITIE.EXEMPLE
5.2. TIPURI DE MOSTENIRE
5.3. CLASE DERIVATE
5.4. COMPORTAMENTUL CONSTRUCTORILOR SI DESTRUCTORILOR
IN CAZUL CLASELOR DERIVATE
6. POLIMORFISMUL
6.1. CLASE VIRTUALE.EXEMPLE.
6.2. FUNCTII VIRTUALE.EXEMPLE
7. SUPRAINCARCAREA OPERATORILOR
7.1. SINTAXA PENTRU SUPRAINCARCARE
7.2. EXEMPLE .OPERATORII ARITMETICI, OPERATORII (),[],<<,>>
7.3. SUPRAINCARCAREA FUNCTIILOR.DEFINITIE.EXEMPLE.
Consideratii metodice
Realizarea unui soft educational care sa cuprinda :lectii, teste on-line si
aplicatii .

PROGRAMAREA ORIENTAT PE OBIECTE

INTRODUCERE
Programele
aplicative
prelucreaz
informaii
din
realitatea
inconjurtoare: inventariaz carile dintr-o bibliotec, prelucreaz texte,
gestionez activitatea unor firme, poiecteaz instalaii etc.
Limbajele de programare trebuie s fie capabile s reprezinte obiectele
din realitate cat mai fidel.Apare necesitatea unui tip de date care s defineasc
o cutie neagr care s nu mai poat fi modificat ci doar adaptat la noile
cerine ale programului.
Tipurile de date puse la dispoziie de programarea structurat
(inregistrarea si tabloul) sunt insuficiente pentru modelarea realitii.Ele
surprind doar starea obiectelor la un moment dat, fr a evidenia
funcionalitatea lor.
Ideea de baz de la care pleac programarea orientat obiect este de a
grupa structurile de date cu operaiile care prelucreaz respectivele date.
Programarea orientat pe obiecte nu este ceva nou;conceptele sale specifice
(abstractizarea datelor, motenirea si polimorfismul) au aprut iniial n alte
limbaje cum ar fi:Simula67, Smalltalk.
C++ a fost dezvoltat la inceputul anilor 1980 de Bjarne Stroustrup de la
AT&T Bell Laboratories.El a creat C++ prin adugarea de noi facilitai limbajului
C pentru ca acesta s suporte in mod eficient programele de simulare bazate
pe evenimente.
Programarea orientat pe obiecte a devenit foarte popular, mai ales
datorit avantajelor sale care ajut dezvoltrii proiectelor actuale, ce devin din
ce in ce mai complexe. Acest stil de programare duce la imprirea aplicaiilor
in mai multe module, astfel nct cel ce dezvolt un modul nu trebuie s
cunoasc detaliile de implementare ale altor module.
O aplicaie a POO este programarea vizual.Astzi este de neconceput
realizarea unei aplicaii fr o interfa grafic tip Windows (Visual C++, C++
Builder etc.).

CAPITOLUL 1: CONCEPTE DE BAZ N POO


Programarea orientat pe obiecte este o tehnic de programare care
dispune de instrumente puternice pentru abstractizarea i modularizarea
datelor.
Un limbaj de programare orientat pe obiecte are mecanismele necesare
susinerii acestui stil de programare.
1.1.

ABSTRACTIZAREA DATELOR.NCAPSULAREA

Simularea obiectelor din lumea real este posibil prin definirea unui tip
de dat abstract.Termenul de tip abstract de dat se refer la un tip de date
definit de utilizator impreun cu un set de operaii ce se pot efectua asupra
acestor date.
Definirea unui tip abstract de date implic specificarea reprezentrii
interne a datelor din acel tip, precum i a funciilor pe care alte module de
program le vor utiliza pentru manipularea tipului abstract de date.
In acest mod se realizeaz o ascundere a informaiei i implicit o
protecie a datelor.Ascunderea informaiilor nseamn defapt ascunderea
detaliilor de implementare i reprezint defapt conceptul POO de ncapsulare.
ncapsularea informaiei permite utilizatorului s trateze clasele i
obiectele acestora ca pe nite cutii negre .Utilizatorul nu trebuie s cunoasc
detalii interne de realizare a unei funcii membre ci doar operaia realizat de
aceasta;mai simplu:nu ne intereseaz schema intern a mainii de splat, a
televizorului sau a calculatorului ci doar cum funcioneaz ele.
ncapsularea este mecanismul prin care datele (variabilele) i funciile
(numite si metode) sunt plasate impreun, ntr-o unic structur.
n POO se pot crea obiecte aparinnd unui tip abstract de date .
Un obiect este o entitate care combin att date ct i funcii care
manevreaz aceste date.Se mai poate spune c obiectele sunt variabile
apartinnd unui tip de date definit de utilizator.
De exemplu, programatorul i poate defini tipul (clasa) matrice i
operatorii care pot fi aplicai matricilor (* pentru nmulirea a dou matrici, +
pentru adunarea a dou matrici, - pentru scderea a dou matrici, etc). Astfel,
el poate folosi tipul matrice n mod similar unui tip predefinit:
matrice A, B;
matrice C=A+B;
Tipul unui obiect (ablon al obiectului) este o clas. O clas se
caracterizeaz prin: numele clasei, atribute, funcii i relaii cu alte clase.
Instana este un obiect dintr-o clas (A, B, C sunt obiecte, instane ale
clasei matrice) i are proprietile definite de clas. Pentru o clas definit, se
pot crea mai multe instane ale acesteia. Toate obiectele au o stare i un
comportament. Starea unui obiect se refer la elementele de date coninute
n obiect i la valorile asociate acestora (datele membre).

Comportamentul unui obiect este determinat de care aciunile pe care


obiectul poate s le execute (metodele).
Atributele specificate n definiia unei clase descriu valoric
proprietile obiectelor din clas, sub diferite aspecte.
n limbajul C++ atributele se numesc date membre. Toate datele membre
sunt atribute instan. Atributele de clas se pot obine n cazul datelor
membre statice (aceeai adres de memorare pentru orice instan a clasei).
Metode (funcii membre). La definirea unei clase se definesc i
metodele acesteia (numite i funcii membre). Fiecare obiect are acces la un
set de funcii care descriu operaiile care pot fi executate asupra lui. Metodele
pot fi folosite de instanele clasei respective, dar i de instanele altor clase
(prin mecanismul motenirii).
Clasa conine att structurile de date necesare descrierii unui obiect, ct i
metodele care pot fi aplicate obiectului. Astfel, gradul de abstractizare este,
mult mai ridicat, iar programele devin mult mai uor de neles, depanat sau
ntreinut.
La crearea unui obiect, alocarea memoriei se poate fi face static sau
dinamic (cu ajutorul unor funcii membre speciale, numite constructori).
Eliberarea memoriei se realizeaz cu ajutorul unor funcii membre speciale,
numite destructori, n momentul ncheierii existenei obiectului respectiv.
Concluzie
Un tip abstract de date poate fi considerat ca un model , un
ablon, dup care se pot crea exemplare de obiecte specifice atunci
cnd este nevoie.

1.2.

MOTENIREA

Motenirea este o caracteristic a limbajelor de programare orientate


obiect, care permite refolosirea codului i extinderea funcionalitii claselor
existente.Mecanismul motenirii permite crearea unei ierarhii de clase i
trecerea de la clasele generale la cele particulare.
In vrful ierarhiei se afl clasa care are trasturi comune pentru toate
celelalte componente ale ierarhiei respective.Pe nivelul urmtor al ierarhiei se
afl clasele care pe lng trsturile comune mai au i trsturi specifice.
Ca exemplu putem lua clasificarea poligoanelor.Poligonul este in vrful
ierarhiei, pe nivelul urmtor triunghiul i patrulaterul.Plecnd de la patrulater
se obtine paralelogramul i apoi dreptunghiul, care este un paralelogram la
care se adaug condiia s aib un unghi drept.Iat ierarhia arborescent n
figura de mai jos :

POLIGON

PATRULATER

TRIUNGHI

PARALELOGRAM

DREPTUNGHI

ROMB

PTRAT

Ptratul (un dreptunghi cu toate laturile egale) motenete toate


proprietile dreptunghiului la care se adaug i alte proprieti (diagonalele lui
sunt axe de simetrie).
Clasa POLIGON reprezint clasa de baz (este o generalizare) i conine
informaiile comune (disponibile prin motenire i subclaselor acesteia).
Clasele DREPTUNGHI i ROMB reprezint clase derivate (sunt o particularizare,
o specializare a clasei PARALELOGRAM) care extind funcionalitatea clasei de
baz i conin informaiile specifice.
Se mai poate spune ca DREPTUNGHI si ROMB sunt clase, iar PARALELOGRAM
este superclas.
Motenirea poate fi: unic sau multipl.

MOTENIREA UNIC
n cazul motenirii unice, fiecare clas are doar o superclas. Exist dou
modaliti de specializare a unei clase de baz:
introducerea de extra-atribute i extra-metode n clasa derivat
(particulare doar clasei derivate);
redefinirea membrilor n clase derivate (polimorfism).
MOTENIREA MULTIPL
n situaia motenirii multiple, o clas are mai multe superclase.
A

Motenirea simpl (unic)

Motenirea multipl

1.3.

POLIMORFISMUL

Polimorfismul este un concept strns legat de conceptul de


motenire.Polimorfism inseamn c o anumit operaie poate s funcioneze
diferit pentru obiecte diferite.De exemplu, operaia de adunare se efectueaz
intr-un fel pentru dou numere intregi si in alt fel pentru dou matrici.
Revenind la exemplul cu figurile geometrice, se observ c fiecarei figuri
(poligon, triunghi,paralelogram etc.) i se poate calcula perimetrul,aria si fiecare
figur ar putea fi desenat pe ecran.
Funciile care realizeaz desenarea sunt de fapt versiuni ale aceleiai
funcii (polimorfism vine din limba grac i nseamn a avea mai multe
forme ).
De exemplu, dac avem urmatoarele instanieri :
poligon p() ;
dreptunghi d() ;
patrat pt() ;
atunci apelul :
p.deseneaz() ;//deseneaz poligonul definit de obiectul p.
Anolog,
d.deseneaz() ;//deseneaz un dreptunghi
pt.deseneaz() ;//deseneaz un patrat etc.
In cadrul apelurilor de mai sus se utilizeaz, de fiecare dat, funcia
membru deseneaz a clasei corespunztoare obiectului prezent n apel.
Polimorfismul permite simplificarea utilizrii obiectelor din clase diferite .
Selectarea unei metode redefinite poate fi realizat n faza de compilare
(legarea iniial), sau n momentul execuiei (legarea trzie). n limbajul C++,
legarea dinamic se poate realiza prin implementarea de:
funcii virtuale (pot fi redefinite polimorfic);
funcii virtuale pure (doar declarate, nu definite).
Aceste aspecte se vor detalia in capitolul 6.

CAPITOLUL 2: CLASE (AbstractDataType)


2.1.

TIPUL STRUCT:DEFINIIE, EXEMPLE. TRECEREA LA TIPUL CLASS

Prezena datelor i a prelucrrilor mpreun si-a fcut apariia inc din


epoca limbajului C.Astfel, au aprut structurile i uniunile.
Definiie Tipul struct (inregistrare) este un tip de dat care permite
nglobarea mai multor tipuri eterogene.
S presupunem c trebuie s prelucram simultan informaii despre un produs:
Denumire char denumire[20];
Pre int pret;
Cantitate int cantitate;
Se poate utiliza un vector? (nu deoarece acesta poate reine date de acelai
tip) Informaiile pe care trebuie s le implementm sunt eterogene (de tipuri
diferite ).
In C++ exist tipul de date struct cu urmatoarea sintax general:

struct [nume structura]


{tip camp1;
tip camp2;

tip camp n;
}[lista variabile];

Nu pot lipsi
simultan!!

Pentru exemplul de mai sus structura poate fi :


1
struct produs
{char denumire[20];
int pret;
int cantitate;
};

struct
{char denumire[20];
int pret;
int cantitate;
}produs;

3
struct produs
{char
denumire[20];
int pret;
int cantitate;
}p,p1;

1. structura se numete produs i are campurile :denumire,pre,cantitate;


2. structura are campurile :denumire,pre,cantitate. Produs este o variabil de
tipul struct ;
3. structura se numete produs i are cmpurile :denumire,pre,cantitate. P,P1
sunt variabile de tipul produs;
Accesarea cmpurilor structurii
Pentru accesarea cmpurilor unei structuri se folosete operatorul de selecie
direct . .
p.denumire cmpul denumire al variabilei p;
p.pret cmpul pre al variabilei p;
p.cantitate cmpul cantitate al variabilei p;
Iat in continuare un exemplu de structur orientat pe obiecte :
Exemplul 1- structur n care se poate ncorpora un pointer la o funcie (in
limbajul C)
#include<conio.h>
#include<iostream.h>
struct exemplu1 //definire tip abstract de date utiliznd struct
{
int info;
int (*functie)();//membru pointer la funcie
};
int functie1();//prototipul funciei, compatibil cu pointerul //specificat ca membru n
struct
exemplu1 ex;//instana ex
void main()
{
ex.info=11;//iniializarea membrului info
clrscr();
ex.functie=&functie1;// iniializarea membrului pointer la funcie
cout<<ex.functie();//utilizarea membrului pointer la funcie
getch();
}
int functie1()
{return ex.info*ex.info;
}

Exemplul 2 structur orientat pe obiecte (in limbajul C++)


#include<conio.h>
#include<iostream.h>
struct exemplu2 //definire tip abstract de date utiliznd struct
{
int info;
int functie ();//membru funcie
};
int exemplu2::functie()
{return info* info;
}
exemplu2 ex;//instana ex
void main()
{
ex.info=11;//iniializarea membrului info
clrscr();
cout<<ex.functie();//utilizarea membrului funcie
getch();
}

Exemplul 3 structur orientat pe obiecte alocat dinamic (in limbajul C++)


#include<conio.h>
#include<iostream.h>
struct exemplu3 //definire tip abstract de date utiliznd struct
{
int info;
int functie ();//membru funcie
};
int exemplu3::functie()
{return info* info;
}
exemplu3 *pex;//declararea unui pointer la structur exemplu3
void main()
{
pex=new exemplu3;//
pex->info=11;//iniializarea membrului info
clrscr();
cout<<pex->functie();//utilizarea membrului funcie
getch();
delete pex;//eliberarea memoriei gestionat de pex
}

Concluzie : Intr-un tip de dat structurat ca inregistrare se pot introduce i


funcii (eventual gestionate prin pointeri) care s indice prelucrrile la care pot
fi supuse datele.Astfel se obine asa numitul tip incapsulat (user built-in), care
n C++ este definit prin noiunea de clas.

2.2.

TIPUL CLASS.DEFINIIE .DATE I METODE MEMBRE .EXEMPLE

Tipul class are, pe lng sintaxa de baz, i o serie de elemente specifice


programrii orientate pe obiecte (clasele i funciile prietene, supradefinirea
operatorilor, motenirea etc.)
Definitie Tipul class (clasa) este un tip abstract de structur, care definete
o mulime de valori i operaiile care actioneaz asupra acelori valori.
Operaiile sunt definite far referiri la reprezentarea sau implementarea
valorilor.Valorile se numesc date membru, iar operaiile se numesc funcii
membru (sau metode).
Declararea unei clase cuprinde definirea : antetului i a corpului ei.
Antetul reprezint interfata i conine toate informaiile legate de clasa
respectiv :datele i prototipurile/definirile funciilor i informaiile
pentru alocarea de memorie de ctre compilator.
Corpul conine definirea funciilor declarate n antet.
Sintaxa pentru declararea unei clase este urmtoarea :
Antetul clasei
class nume_clasa{
private:
date membru private
constructori privati
functii membre private
protected :
date membru protejate
constructori protejati
functii membre protejate
public :
date membru publice
constructori publici
destructor public
functii membre publice
};
Corpul clasei
tip_functie_membru1 nume_clasa::nume_functie_membru1(lista parametrilor)
{}
tip_functie_membru2 nume_clasa::nume_functie_membru2(lista parametrilor)
{}

Observaii
Private, protected i public sunt cuvinte cheie care specific modul de
acces la datele i metodele din seciunea delimitat de fiecare ;
n cazul tipurilor de date definite cu ajutorul structurilor, se pot aplica
modificatorii de acces. n cazul tipurilor definite cu ajutorul uniunilor,
accesul implicit (public) nu poate fi modificat
Un membru al clasei (dat sau metod) este calificat n corpul clasei prin
operatorul de rezoluie :: ;
Variabilele de tipul definit prin class se numesc instane ale clasei ;un
membru al clasei este calificat folosind operatorii . (operator de
selecie direct) sau -> ( operator de selecie indirect).
O variabil de tip clas poate stoca un set complet al datelor clasei
respective.Acest set reprezint o instaniere a clasei, adic o manifestare
concret a clasei.
In teoria programrii orientate pe obiecte, o astfel de instan poart numele
de obiect.

Exemple de construire a unor clase


1. Definirea tipului complex cu ajutorul unei clase
#include<iostream.h>
class complex //antetul clasei
{
protected:
double re;//datele membre
double im;
public://metodele membre
void initializare (double inire,double iniim)
{re=inire;im=iniim;}
double returnre()//returneaza partea reala
{return re;}
double returnim()//returneaza partea imaginara
{return im;}
void adunare_complex(complex c1,complex c2) ;
void afisare_complex() ;//afisarea unui numar complex
};
//corpulclasei
void complex :: adunare_complex(complex c1,complex c2)
{ re=c1.re+c2.re ;
im=c1.im+c2.im ;
}
void complex :: afisare_complex()
{if (re>=0) cout<<re<< +i ;
else cout <<(<<re<<)+i ;
if (im>=0) cout<<im;
else cout <<(<<im<<) ;
cout<<endl;

}
//functia main
void main()
{complex c1,c2,c3;double r,i;
cout<<Introduceti valorile pentru primul numar: ;
cin>>r>>i ;c1.initializare(r,i) ;
cout<<Introduceti valorile pentru al doilea numar: ;
cin>>r>>i ;c2.initializare(r,i) ;
c1.afisare_complex();c2.afisare_complex();
c3.adunare_complex(c1,c2) ;cout<<endl ;
cout<<rezultatul adunarii <<endl;
c3.afisare_complex();cout<<endl;
//acelasi rezultat se obtine astfel
cout<<c3.returnre()<<<<c3.returnim();
}
2. Definirea tipului dreptunghi cu ajutorul unei clase
#include <iostream.h>
class dreptunghi{ //antetul clasei
double lungimea, latimea;//datele membre
public://functiile(metodele) membre
void dimensiuni(double, double );
double arata_lungimea()
{return lungimea;}
double arata_latimea()
{return latimea;}
double arie()
{return lungimea*latimea;}
};
//corpul clasei
void dreptunghi:: dimensiuni(double L, double l)
{lungimea=L; latimea=l;}
void main()
{ dreptunghi a;double l1, l2;
cout<<"Lungime="; cin>>l1;cout<<"Latime="; cin>>l2;
a. dimensiuni(l1, l2);cout<<"Dimensiunile dreptunghiului sunt:";
cout<<a.arata_lungimea()<<" si"<<a.arata_latimea()<<endl;
cout<<"Aria dreptunghiului:"<<a. arie()<<endl;
cout<<"Dimens :"<<sizeof(a)<<endl;
}
Observaie
Nivelul de acees implicit la membrii clasei este private. Dac pentru metode
nu s-ar fi folosit modificatorul de acces public, metodele nu ar fi putut fi
folosite n funcia main.

2.3. OBIECTE. MEMBRII UNEI CLASE


Un obiect este o dat de tip definit printr-o clas.Declararea obiectelor
de un anumit tip are o form asemntoare celei pentru datele de tip
predefinit:
nume_clasa lista_obiecte;
n exemplul 2 n funcia main, se declar obiectul (variabila) a de tip
dreptunghi. Obiectul a este o instan a clasei dreptunghi. Se pot declara
oricte obiecte (instane) ale clasei.
Exemple:
dreptunghi a;
dreptunghi b, c, d;
Datele membru se aloc distinct pentru fiecare instan (atribute ale
instanei) a clasei (pentru declararea obiectelor a, b, c, d de tip dreprunghi,
vezi figura de mai jos). Excepia de la aceast regul o constituie datele
membru statice (2.5.), care exist ntr-un singur exemplar, comun, pentru
toate instanele clasei.

lungimea
latimea

a.lungimea

lungimea

a.latimea

latimea

b.lungimea
b.latimea

Metodele figureaz ntr-un singur exemplar, oricte instane ale clasei ar


exista.
n exemplul anterior, metoda dimensiuni este doar declarat n interiorul
clasei, fiind abia apoi definit. La definirea funciei (void dreptunghi::
dimensiuni(double lungimeaL, double l)) s-a folosit operatorul :: (scope
resolution operator) care specific relaia de apartenen a metodei la tipul
dreptunghi.
Operatorul cupleaz nume_clasa::nume_functie_membru i definete
domeniul (scopul) n care acea funcie va fi recunoscut. Prezena numelui
clasei n faa funciei membru este obligatorie, deoarece, altfel nu s-ar putea
face distincia ntre metode cu nume identice, care aparin unor clase diferite.
O funcie membru se apeleaz totdeauna n strns dependen cu un
obiect din clasa respectiv. Legtura dintre obiect i funcia membr se face
prin operatorul . sau operatorul ->, dup cum obiectul este desemnat prin
nume sau prin pointer.

Exemplu
class dreptunghi{
double lungimea, latimea;
public:
void dimensiuni(double, double );
double arata_lungimea();
double arata_latimea();
double arie();
};
//..
void main()
{ dreptunghi a;//a obiect din clasa dreptunghi
//
cout<<"Aria dreptunghiului:"<< arie()<<endl;
dreptunghi *pa;//obiect desemnat prin pointer
pa=&a;
double aria=pa-> arie();
cout<<"Aria dreptunghiului:"<< arie()<<endl;
}

2.4.

VIZIBILITATEA MEMBRILOR CLASEI(MODURI DE ACCES:PRIVATE,


PROTECTED,PUBLIC)

n cadrul declarrii unei clase exist trei grade de blocare a accesului la


elementele componente, date i funcii:
private domeniul privat, care conine membrii proprii sau privai ai
clasei ;acest tip de membru este accesibil numai funciilor membre ale
clasei.Instanelor clasei li se interzice accesul la membrii privai ;
protected domeniul protejat, care conine membrii protejai ;ei sunt
accesibili numai funciilor membru ale clasei respective si funciilor
membru ale claselor derivate din aceasta.Instanele clasei nu pot accesa
membrii protejai ;
public domeniul public, care conine membrii publici ; acest tip de
membri sunt vizibili pentru funciile membru ale clasei, pentru instanele
clasei, pentru funciile membru ale claselor derivate i pentru instanele
acestora.
Observatii
Ordinea n care sunt utilizate aceste trei moduri de acces nu este impus,
dar membrii unei clase, neinclui in niciunul dintre aceste niveluri, sunt
considerai implicit private.
ncapsularea datelor membru i a funciilor membru n cadrul obiectului
ofer funciilor membru dreptul de a accesa datele membru.

2.5.

FUNCII MEMBRE(FUNCII IN-LINE)

DEFINIIE
O funcie este considerat ca fiind membru al unei clase dac prototipul ei
este ncadrat n declararea antetului clasei respective (corpul funciei putnd fi
definit n afara antetului clasei cu ajutorul operatorului de rezoluie ::).
TIPURI DE FUNCII MEMBRU
Funcii pentru administrarea clasei reprezint setul de funcii care
realizeaz : crearea obiectelor (constructori), distrugerea obiectelor
(destructori), operaia de atribuire ntre obiecte (operator =) etc.;
Funcii pentru implementarea clasei implementeaz comportamentul
tipului de date reprezentat de clasa respectiv (pentru clasa Complex:
adunarea, scderea etc. a dou numere complexe, modulul unui numr
complex etc. );
Funcii de acces la clas acestea returneaz valorile unor date membre
declarate private.
OBSERVAIE
Dac funcia este definit in interiorul clasei atunci ea trebuie s fie o funcie
inline. O funcie inline este o funcie care nu conine structuri repetitive i nici
structuri switch.
De exemplu funcia arat_lungimea() din clasa dreptunghi prezentat n
paragraful 2.2. la exemplul 2:
double arata_lungimea()
{return lungimea;}
ASPECTE PRIVIND DEFINIREA FUNCIILOR MEMBRU
Modul de utilizare al funciilor inline
Funciile definite in antetul clasei sunt automat de tip inline (apelul
funciei este nlocuit peste tot n program cu codul ntregii funcii ceea ce
duce la scderea timpului de execuie se evit transmiterea
parametrilor de apel pe stiva sistemului);
Funciile definite n exteriorul antetului clasei conin cuvntul cheie inline
i la declararea funciei ct i la definirea ei;
Sintaxa declarrii unei funcii inline este urmtoarea:
inline tip_returnat nume_funcie ([list parametri]);

Pointerul this
Fiecare funcie membru posed un argument ascuns, numit this ;acesta este
transmis automat de ctre compilator.This este un pointer ctre obiectul care
apeleaz funcia.
Spre deosebire de pointerii obinuii, pointerul this realizeaz uniunea dintre
membrii clasei i funcia ce acioneaz asupra lor (funcie membru).
Exemple :
1. S presupunem c am dori s cunotem adresa fizic a unui obiect din
clasa dreptunghi.Atam clasei urmtoarea funcie membru :
void dreptunghi :: afieaz_adresa()
{ cout<<Adresa fizica a acestui obiect este <<this;}
2. Utilizarea explicit a pointerului this poate fi observat n funcia de mai
jos :
void dreptunghi :: afiseaza_latimea()
{cout<<Ltimea este << this->latimea;}
Atributul const
Atributul const este utilizat pentru a face distincie ntre funciile care modific
valorile datelor membre i cele care nu le modific:cele din urm au atributul
const in declaraie, plasat astfel:
Tip_returnat clasa::nume_funcie() const {}
Odat declarat acest atribut, orice tentativ de a modifica datele unui obiect
este semnalat ca eroare.

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