Sunteți pe pagina 1din 21

Confereniar dr. ing.

MIRELA PATER
ORGANIZAREA CURSULUI
2 ore curs/sptmn
2 ore lucrri practice de laborator/sptmn

Nota final
66.66% nota de la examen (test gril teorie +
problem)
33.34% nota final de la laborator

Prezena obligatorie la curs i laborator
CONINUTUL CURSULUI:
1. Preprocesorul
2. Introducere n programarea
orientat pe obiecte
2.1. Stream-uri
2.2. Operatori
3. Clase i obiecte
3.1. Clas
3.2. Obiect
3.3. Funcii membru
4. Operatori de acces
5. Iniializarea obiectelor
unei clase
5.1. Constructori
5.2. Destructori
6. Clase imbricate
7. Declaraii friend
8. Motenirea
9. Polimorfismul
10. Funcii virtuale
11. Clase abstracte
BILIOGRAFIE
http://tutorialeplusplus.blogspot.com/p/limbajul-c-referinta-completa.html
http://itassistant.org/download/Invata%20Limbajul%20de%20Programare%2
0C++.pdf
Deitel & Deitel. Java - How to program. Prentice Hall, 1999, Capitolul 8,
Object-Based Programming.
Stroustroup, B., The C++ Programming Language, Special Edition, Editura
Addison-Wesley, Boston, 2000
M. Preda, A. Mirea, D. Preda, C. Teodorescu. Introducere in programarea
orientata-obiect. Concepte fundamentale din perspectiva ingineriei software,
Editura Polirom. 2010
O. Dogaru, C++ - teorie i practic, volumul I, Editura Mirton, Timioara, 2004
C. Marinescu, P. Mihancea. Programarea orientat pe obiecte, Bucureti,
2005
Edward V. Berard, Abstraction, Encapsulation, and Information Hiding,
www.toa.com/pub/abstraction.txt, 2002
Bruce Eckel. Thinking in Java.(3rd Edition).
http://www.mindview.net/Books/TIJ
Java Language Specification. http://java.sun.com/docs/books/jls/
PREPROCESORUL
Preprocesarea este o faz care precede faza de compilare
a unui program surs.
Preprocesorul limbajului C/C++ este relativ simplu i n
principiu execut substituii de texte.
Prin intermediul lui se realizeaz:
- Includeri de fiiere header (antet);
- Definiii i apeluri de constante simbolice i
macrodefiniii;
- Compilare condiionat a codului program;
- Execuie condiionat a directivelor de preprocesare
Directivele de preprocesare au caracterul # la nceput de
linie.
INCLUDEREA DE FIIERE ANTET
DIRECTIVA #INCLUDE
Directiva #include introduce o copie a fiierului specificat n
programul surs
O directiv #include este nlocuit n timpul preprocesrii cu
coninutul integral al fiierului specificat, care se insereaz n
locul ei.
Forma directivei #include este:
#include <nume_de_fisier:>
Caut fiierul n biblioteca standard
Se folosete doar la fiierele bibliotecii standard
#include nume_de_fisier
Caut fiierul n directorul curent i dac nu e gsit caut n
continuare n biblioteca standard dup reguli definite de
implementarea compilatorului de C
Se folosete pentru fiierele definite de utilizator
INCLUDEREA DE FIIERE ANTET
DIRECTIVA #INCLUDE
Un fiier inclus poate conine la rndul su directive #include.
Utilizarea directivei #include e o modalitate de a utiliza aceleai
declaraii n cazul programelor care sunt mprite pe mai multe fiiere
care se dorete a fi compilate mpreun.
Dac se modific un fiier inclus, trebuie recompilate toate fiierele
care l includ pe acesta, direct sau indirect.
Un fiier antet poate conine: definiii de tipuri, declaraii de funcii,
declaraii de variabile, de structuri sau clase, definiii de constante,
macrodefiniii, alte directive de includere.
n principiu un fiier antet poate fi inclus de ctre mai multe module
diferite ale aceleiai aplicaii.
Un fiier antet bine proiectat nu trebuie s conin definiii de
funcii i definiii de date!
Dac fiierul antet conine o definiie de funcie sau o definiie de
variabil global, prin includerea multipl se realizeaz definirea
multipl a acestor entiti, fapt care constituie o eroare.
DEFINIRE CONSTANTE SIMBOLICE I
MACRODEFINIII.
DIRECTIVA #DEFINE
Directiva #define este folosit pentru definirea constantelor
simbolice i macrodefiniiilor (macro).
Definirea constantelor simbolice prin directiva #define este
un caz particular de macrodefiniie.
n general, o macrodefiniie (un macro) are la baz operaia
de substituie.
Un macro are o definiie i poate fi apelat de un numr
oarecare de ori. La definirea unui macro se specific de fapt
textul care urmeaz a se substitui la fiecare apel al su. Acest
text poate fi variabil, n funcie de anumii parametri.
La compilarea programului, toate apariiile constantei simbolice
sau macrodefiniiei definite prin directiva #define, sunt
nlocuite cu textul declarat (de substituit).
Formatul general al directivei #define
#define identificator(p1, p2, ...,pn) text_de_substituit
identificator = numele macro-ului
p1, p2,... , pn = parametrii macro-ului
text_de_substituit = textul cu care este nlocuit macro-ul la
fiecare apel
O definiie poate folosi definiii anterioare.
Textul de nlocuit este restul liniei surs; dac se dorete
continuarea definiiei pe mai multe linii, la sfritul liniei
care urmeaz s fie continuat, se scrie caracterul /.
n cazul unei macrodefiniii cu parametri, ntre numele
macro-ului i paranteza deschis nu trebuie s existe
spaii.
DIRECTIVA #DEFINE
EXEMPLE:
1. Definire unei constante simbolice:
#define PI 3.14159 - Tot ce se afl la dreapta
identificatorului este textul de substituit
#define PI = 3.14159 - Se nlocuiete "PI" cu "=3.14159"
O constant simbolic odat creat nu poate fi redefinit.
2. Definirea unei macrodefiniii cu un singur argument
Macro pentru calculul ariei unui cerc
#define ARIA_CERC(x) (PI*(x)*(x))
La apel vom avea
float aria;
aria = ARIA_CERC(4);
care va deveni la precprocesare:
aria = (3.14159*(4)*(4));
EXEMPLE:
3. Definirea unei macrodefiniii cu argumente multiple
a) Un macro pentru calculul maximului a dou numere.
#define MAX(x,y) ((x)>(y) ? (x) : (y))
a.1.Un exemplu simplu de apel al acestui macro este:
float a,b,c;
c=MAX(a,b);
La preprocesare, linia c=MAX(a,b); se nlocuiete cu
c=((a) > (b) ? (a) : (b));
a.2. Un alt exemplu de apel al macro-ului MAX:
int i,j,k;
k=MAX(i + j, i - j);
La preprocesare, linia k=MAX(i + j, i - j); va fi nlocuit cu
k=(i + j) > (i - j) ? (i + j) : (i - j))
EXEMPLE:
b) Un macro pentru calculul ariei unui dreptunghi
#define ARIA_DREPTUNGHI( x, y ) ( ( x ) * ( y ) )
La apel vom avea
float ariadr, a, b;
ariadr = ARIA_DREPTUNGHI(a + 4, b + 7);
care va deveni la preprocesare:
ariadr = ( ( a + 4 ) * ( b + 7 ) );
Exist i anumite pericole legate de utilizarea necorespunztoare a
macrodefiniiilor, care pot avea efecte secundare ascunse.
Exemple:
1. Apelul macro-ului MAX(i++, j++) va incrementa de dou ori
valoarea variabilei care e mai mare, pentru c expandarea
(substituirea) macro-ului se face n felul urmtor:
(i++) > (j++) ? (i++) : (j++)
2. Macroul de ridicare a unui numr la ptrat
#define PATRAT(x) x*x
d rezultate eronate n cazul n care este apelat de exemplu pentru x+1:
PATRAT(x+1) este expandat n
x+1*x+1, ceea ce, avnd n vedere precedena operatorilor, nu
calculeaz ptratul expresiei (x+1).
Pentru a fi corect un macro de ridicare la ptrat ar trebui scris utiliznd
paranteze:
#define PATRAT(x) (x)*(x)
EXEMPLE:
4. Transformarea unui caracter din liter mic n liter
mare:
#define UPPER(c) ((c)-a+A)
5. Definirea unui ciclu infinit:
#define FOREVER for(;;)
6. Interschimbarea a dou numere:
#define SCHIMBA(X,Y) { int t; t=X; X=Y; Y=t; }
Apelul SCHIMBA(a,b) este substituit cu secvena:
{ int t; t=a; a=b; b=t; }
Variabila t exist numai n interiorul instruciunii compuse
generat de preprocesor!
EXEMPLE:
7. Macro-ul de interschimbare a dou elemente poate fi
rescris astfel nct s fie parametrizat i cu tipul elementelor:
#define SWAP(TIP, X, Y) { TIP t; t=X; X=Y; Y=t; }
Macrodefiniia SWAP se poate apela cu parametri de orice tip pe
care este definit operaia =.

int a, b;
float x, y;
SWAP(int, a, b);
SWAP(float, x, y);
Macrodefiniia sau constanta simbolic poate fi oricnd
suspendat cu directiva #undef
#undef identificator
Identificatorul (numele) respectiv nu mai este expandat
(substituit) n continuarea fiierului.
O constant simbolic sau o macrodefiniie suspendat
poate fi oricnd mai trziu redefinit

Definirea unui macro nu se ncheie, de obicei, cu ;.
DIRECTIVA #UNDEF
COMPILAREA CONDIIONAT
Controleaz directivele preprocesorului i compilarea
Permite s se aleag dintr-un text general prile care se
compileaz mpreun.
Se realizeaz folosind structuri similare lui IF-construciile
#if, #ifdef i #ifndef
DIRECTIVA #IF
Se noteaz cu expr o expresie constant (valoarea ei poate fi
evaluat de preprocesor la ntlnirea ei).
#if expr
text
#endif
Dac expr are valoarea adevrat atunci text se supune
preprocesrii, altfel se continu cu ceea ce urmeaz dup
#endif.
Directiva #if poate avea i ramur de else:
#if expr
text1
#else
text2
#endif

Directivele de preprocesare (compilare condiionat)
i textul care urmeaz s fie inclus sau nu n
programul pentru compilare se dau pe linii de text
separate.
Fiecare directiv #if trebuie s se termine cu #endif
COMPILAREA CONDIIONAT
n interiorul unei directive #if, expresia defined(nume) are
valoarea 1 dac nume a fost deja definit de o directiv #define,
sau 0 n caz contrar.

#if !defined(NULL)
#define NULL 0
#endif

Determin dac constanta simbolic NULL a fost definit
Dac NULL este definit, defined(NULL) este evaluat cu 1
Dac NULL nu este definit, aceast funcie definete NULL ca fiind 0
Exemplu: includerea o singur dat a coninutul unui fiier antet
antet1.h:
#if !defined(ANTET1)
#define ANTET1
/* coninutul fiierului antet1.h */
#endif
COMPILAREA CONDIIONAT
Prima includere a fiierului antet1.h definete numele ANTET1.
n cazul n care ar mai exista includeri ulterioare, chiar i
indirect, prin alte fiiere, preprocesorul vede c numele e
deja definit i sare direct la #endif.
Aceast facilitate este util n situaii n care un fiier antet ar
fi altfel inclus de mai multe ori, direct sau indirect, ca n
urmtoarea situaie de exemplu: Se consider un fiier antet
a.h i un fiier antet b.h care conine o directiv de includere
a lui a.h. Dac un alt fiier main.c conine directive de
includere a ambelor fiiere a.h i b.h, rezult c fiierul a.h
va fi inclus de dou ori. Aceast includere dubl poate
conduce la erori datorit redefinirii unor variabile i
constante coninute n a.h.
COMPILAREA CONDIIONAT
DIRECTIVELE #IFDEF I #IFNDEF
Directivele #ifdef i #ifndef testeaz dac un nume
este sau nu este definit.
#ifdef prescurtarea pentru #if defined(name)
#ifndef prescurtarea pentru #if !defined(name)

Reluarea exemplului anterior:
#ifndef ANTET1
#define ANTET1 /* coninutul fiierului antet1.h */
#endif

Alte declaraii:
#elif echivalent cu else if dintr-o structur if
#else echivalent cu else dintr-o structur if

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