Documente Academic
Documente Profesional
Documente Cultură
Conf.dr.ing. Constantin Brbulescu Cap. 1. Introducere n limbajul C++ Note de curs UPC2 2014-2015
Opional, pe lng aceste elemente pot fi prezente i faciliti de testare i depanare, care la nevoie
ajut programatorul n activitatea de depistare i corectare a erorilor. Asemenea opiuni sunt:
breakpoints pentru ntreruperea execuiei algoritmului n punctele stabilite de programator;
trace pentru execuia pas-cu-pas a programului;
watch pentru urmrirea coninutului variabilelor.
O form mai dezvoltat a mediilor integrate de dezvoltare reprezint mediile integrate de dezvoltare
vizual, aceast ultima categorie viznd asistarea programatorului n realizarea interfeelor grafice ale
aplicaiilor (Grafical User Interface GUI). n aceste variante de IDE sunt integrate version control system
i alte unelte prin care se simplific construcia unui GUI. De asemenea, aceste IDE-uri moderne prezint i
un inspector de obiecte, browser de clase, diagrama de ierarhii de clase, utile mai ales n programarea
orientat pe obiecte. Obiectivul acestor IDE-uri mai dezvoltate este de a scuti programatorul de conceperea i
scrierea codului specific lucrului cu interfaa grafic.
n mod normal un IDE este specific unui limbaj de programare, dar la ora actual, pe pia exist mai
multe IDE-uri care au implementate mai multe limbaje (IDE multi-limbaj), cum ar fi:
Eclipse IDE;
Komodo IDE;
CodeBlocks;
NetBeans;
Microsoft Visual Studio (exist varianta free Microsoft Visual Studio Express).
De exemplu, Eclipse are ca limbaj de baz Java, dar dispune de plugin-yui pentru C / C++, Phyton,
Perl, Ruby, Fortran, Cobol, PHP, JSP / Servlet, J2EE, OOD/OOP etc. Evident, toate cu propriul debugger i
opiuni IDE integrate proprii.
n ceea ce urmeaz, se prezint sub form de tabele, cteva medii integrate de dezvoltare mai
cunoscute i mai utilizate de programatori (tabelul 1.1).
Tabelul 1.1. Cele mai utilizate tipuri de IDE-uri
IDE pentru Windows, Linux, MAC
Code::Blocks
CodeLite
DialogBlocks
Eclipse
SPE (Stani's Python Editor)
wxHatch
MinGW Developer Studio
NetBeans C/C++ Development Pack
IDE exclusiv pentru Windows
Anjuta
CodeForge
KDevelop
IDE exclusiv pentru MAC OS
Xcode
Fiecare IDE cu compilatorul i / sau interpretorul lui sau cu o list de compilatoare i / sau
interpretoare, oferind ansa programatorului s decid cu care dorete s lucreze.
Conf.dr.ing. Constantin Brbulescu Cap. 1. Introducere n limbajul C++ Note de curs UPC2 2014-2015
Windows
Unix
GCC
DA
DA
C++ Builder
Turbo C++ Explorer
C++ Compiler
Borland C++
Clang
Intel C++ Compiler
NetBeans
Open64
XL C/C++
VisualAge C++
Visual C++
DA
DA
DA
DA
DA
DA
DA
NU
NU
DA
DA
DA
NU
NU
NU
DA
DA
NU
DA
DA
DA
NU
Tip licen
IDE
Acest proces de compilare, n urma cruia codul surs se transform n limbaj cod main i se
genereaz executabilul se ntmpl n mai multe faze. Principale faze ale compilrii se pot urmri pe fig. 1.1.
Conf.dr.ing. Constantin Brbulescu Cap. 1. Introducere n limbajul C++ Note de curs UPC2 2014-2015
unde fiecare fi este numele unei funcii; tip_returnat reprezint tipul valorii calculate de funcie.
Funcia main() reprezint programul principal care deine controlul informaional al ntregului
program, iar celelalte funcii sunt apelate. Funcia main nu poate fi apelat. Orice funcie ns poate apela o
funcie fie din program, fie din biblioteca sistemului. n acest caz ea se numete apelant.
Instruciunile funciilor care descriu algoritmul implementat n funcie se termin fiecare cu caracterul
; i se ncadreaz ntre acolade formnd corpul funciei. Funcia main() nu trebuie neaprat s fie prima n
program ca ordine, dar ea va fi apelat prima dat la rularea programului.
Partea de program care deine controlul ntregului program se numete program principal. n C++
acesta este reprezentat de funcia main(). Celelalte sunt subprograme.
Subprogramele sunt de dou tipuri: funcii i proceduri. Ele sunt asemntoare din punct de vedere
structural.
O funcie descrie un sub-algoritm i returneaz programului apelant un singur rezultat care este o
constant de un anumit tip care trebuie precizat (tip_returnat).
Exemplu:
un subprogram care calculeaz valoarea unui determinant al unei matrice ptrate este un numr, deci
calculul determinantului poate fi descris de o funcie.
O procedur descrie i ea un sub-algoritm, dar poate returna programului apelant 0, unul sau mai
multe rezultate. Prin urmare, procedura este mai general dect funcia.
Exemplu:
calculul sumei a doi vectori de acelai tip i aceeai dimensiune se poate descrie folosind o procedur;
produsul a dou matrice (tot o matrice) poate fi descris de o procedur.
Modul de apelare le deosebete de asemenea.
O funcie se apeleaz prin citirea numelui su, urmat n paranteze de lista parametrilor actuali:
dac det(A) 0 atunci sistem compatibil,
funcia det(A) apare n expresia det(A) 0.
O procedur se apeleaz printr-o instruciune de apel de procedur.
Funciile i procedurile se mpart n:
intrinseci, ale limbajului, care sunt frecvent folosite de programatori, motiv pentru care sunt salvate n
bibliotecile limbajului. Acestea sunt apelate atunci cnd este necesar (de exemplu: sin, cos etc.);
definite de utilizator i create n procesul de rezolvare a problemelor.
n C i C++ nu exist ns termenul de procedur, ci numai cel de funcie. De asemenea nu exist
nici termenul de funcie intrinsec, ca n alte limbaje, acestea gsindu-se n diferite biblioteci.
Toate compilatoarele C se livreaz cu o bibliotec standard de funcii care efectueaz operaii de baz.
C++ admite ntreaga bibliotec a standardului ANSI C. Prin urmare, toate funciile limbajului standard
C sunt valabile att n programele scrise n C, ct i n C++. C++ are ns i funcii de bibliotec proprii.
Toate compilatoarele de C++ sunt i compilatoare de C.
Atunci cnd se compileaz programe n C fiierul trebuie s aib extensia .C, iar cnd se compileaz
programe n C++, fiierele trebuie s aib extensia .CPP.
Conf.dr.ing. Constantin Brbulescu Cap. 1. Introducere n limbajul C++ Note de curs UPC2 2014-2015
exemplu 2:
//un program simplu care afieaz pe monitor un mesaj de salut
#include <iostream>
using namespace std;
int main()
{
cout << "Acesta este primul meu program C++ !";
return 0;
}
Examinnd codul programului prezentat n exemplul 2, se remarc urmtoarele caracteristici ale unui
program scris n limbajul C++ :
comentariile care nu depesc o linie sunt precedate de caracterele // . Este acceptat i modalitatea de
inserare a comentariilor n cadrul codului surs prin folosirea, la nceputul comentariului a caracterelor
/* i la sfritul comentariului a caracterelor */ . Aceast ultim modalitate de inserare a comentariilor
este specific limbajului C.
programele accept codul surs la dou niveluri: global i local (n funcii). n limbajul C++, funciile
nu pot conine la rndul lor subfuncii (sau funcii imbricate).
funcia main() joac un rol foarte important n viaa unui program C++, pentru c execuia oricrui
astfel de program ncepe cu ea. Prin urmare, un program C++ nu poate avea dect o singur funcie
main().
funcia main() poate fi plasat oriunde n cadrul codului surs al programului. ntruct main() este o
funcie similar (ca structur i funcionalitate) oricrei alte funcii C++, ea poate avea propriile sale
tipuri de date locale, constante i variabile. n plus, funcia main() trebuie s returneze o valoare, la fel
ca orice alt funcie.
irurile de caractere n C++ se scriu ntre ghilimele, n timp ce caracterele se scriu ntre apostrofuri.
Exemplu: 'A' este un caracter; "A" reprezint un ir de caractere format dintr-un singur caracter. C++
trateaz diferit 'A' i "A".
pentru a defini blocuri de program, n C++ se utilizeaz caracterele paranteze acolade ( { } ), pentru
nceput, respectiv sfrit de bloc.
fiecare instruciune dintr-un program C++ trebuie s aib la sfrit caracterul ; (punct i virgul).
acest program conine o directiv de preprocesare #include. Pentru ca o funcie s fie apelat,
compilatorul trebuie s gseasc anumite informaii despre ea (prototipul su). Aceste informaii se
gsesc ntr-un fiier avnd extensia .h (n cazul de fa IOSTREAM.H). A fost aleas aceast extensie
datorit faptului c un astfel de fiier este considerat de tip header (antet). Prototipurile funciilor care
pot fi apelate n cadrul limbajului s gsesc grupate n fiiere de tip header. Acestea reprezint o
resurs central pentru declaraiile i apelul unor funcii utilizate n program. Mai multe funcii
nrudite (de exemplu cele pentru citire / scriere) au prototipurile grupate n acelai fiier. Fiecare
program ncepe cu una sau mai multe instruciuni de includere a fiierelor antet. Aceste fiiere se afl n
mod normal ntr-un subdirector numit Include din cadrul directorului care conine compilatorul de C++.
n procesul de translatare a codului surs n program executabil apare o nou faz care se execut
naintea compilrii. Aceast faz se numete preprocesare. Se execut de programul numit
preprocesor, care se apeleaz automat. n faza de preprocesare fiierul header este inclus n textul
surs. Directiva include solicit programului preprocesor includerea n cadrul textului surs a fiierului
header solicitat de programator.
de asemenea, se poate observa prezena directivei de compilare using. Atenie la diferena ntre
directiva using (using Directive) i instruciunea de declarare using (using Declaration). n timp ce
directiva using permite identificatorilor ntr-un spaiu de nume s fie utilizate fr specificarea
denumirii spaiului de nume ca i calificator explicit, instruciunea de declarare using permite definirea
Conf.dr.ing. Constantin Brbulescu Cap. 1. Introducere n limbajul C++ Note de curs UPC2 2014-2015
unui identificator ntr-o regiune declarativ. De exemplu, standardul ANSI/ISO C++ solicit declararea
explicit a spaiului de nume din biblioteca standard. tiind acest lucru, programatorul cnd utilizeaz
biblioteca iostream, pentru instruciunea de afiare cout trebuie s specifice spaiul de nume ntr-unul
din urmtoarele moduri:
explicit: std::cout;
utiliznd directiva using: using namespace std;
utiliznd instruciunea de declarare using: using std::cout.
instruciunae "using namespace std;" este compus din patru atomi lexicali: using, namespace sunt
cuvinte cheie, identificatorul std care denumete spaiul de nume standard i simbolul ";" prin care se
ncheie orice instruciune simpl (cele compuse conin bloc de instruciuni, deci n cazul lor se
utilizeaz simbolurile {}). Mai devreme s-a explicat la ce se utilizeaz cuvntul cheie using. n
continuare se prezint utilitatea cuvntului namespace (spaiu de nume). Acesta se definete ca o
regiune declarativ care ofer o modalitate de a separa un spaiu de nume de altul. n practic, ca
urmare a creterii complexitii programelor i a utilizrii unor biblioteci de funcii i de clase tot mai
bogate, pentru evitarea coliziunilor dintre nume (utilizarea aceluiai identificator pentru obiecte
diferite) a fost introdus mecanismul namespace (fig. 1.2).
unde namespace este cuvntul rezervat pentru definirea spaiilor de nume, nume_spaiu_de_nume este
identificatorul spaiului de nume. Apelarea spaiilor de nume se face prin:
nume_spaiu_de_nume::cod;
Conf.dr.ing. Constantin Brbulescu Cap. 1. Introducere n limbajul C++ Note de curs UPC2 2014-2015
#include <iostream>
using namespace std;
// spaiu de nume #1
namespace primul_spatiu_de_nume
{
void calcul(){
cout << "Coninut primul_spatiu_de_nume " << endl;
}
}
// spaiu de nume #2
namespace al_doilea_spatiu_de_nume
{
void calcul(){
cout << "Continut al_doilea_spatiu_de_nume " << endl;
}
}
int main ()
{
// Apelare funcie din primul spaiu de nume.
primul_spatiu_de_nume::calcul();
// Apelare funcie din al doilea spaiu de nume.
al_doilea_spatiu_de_nume::calcul();
return 0;
}
programul C++ prezentat anterior afieaz irul de caractere Acesta este primul meu program
C++ ! la dispozitivul standard de ieire, numit cout, care, n majoritatea cazurilor este monitorul.
Acest lucru se realizeaz cu ajutorul operatorului de inserare <<.
funcia main() trebuie s returneze o valoare care s semnaleze o eventual eroare n program. Faptul
c funcia main() a returnat valoarea 0 semnaleaz sistemului de operare terminarea normal, fr
erori, a programului.
instruciunile programului se separ i se termin cu caracterul ; (punct i virgul) i se includ ntre
acolade ( { } ).
Conf.dr.ing. Constantin Brbulescu Cap. 1. Introducere n limbajul C++ Note de curs UPC2 2014-2015
Exemplu:
a=10; //variabilei a i s-a atribuit valoarea 10
b='V'; //variabilei b i s-a atribuit valoarea 'V'
unde e1, e2, ..., en sunt constante, variabile, funcii, expresii n general.
Constantele ir de caractere se scriu ntre ghilimele. Cuvntul cout reprezint un flux de ieire ctre
monitor, iar caracterele << se numesc operator de inserare.
Instruciunea cout solicit introducerea fiierului antet iostream.h i din acesta spaiul de nume
(namespace) std.
Diagrama sintactic a instruciunii de ieire cout << este prezentat n fig. 1.3.
Prin stream se nelege un flux de informaii care provine de la o surs de date ctre o destinaie.
Instruciunea cout arat c datele provin de la expresii i sunt transmise ctre monitor.
Exemple
cout<<11<<22;
"<<22<<' '<<33;
pe monitor se afieaz: 11 22 33
cout<<11<<endl<<22;
pe monitor se afieaz: 11
22
Instruciunea endl (end line sfrit de linie) realizeaz salt la linia urmtoare. n locul acesteia se
poate folosi caracterul de linie nou \n.
Conf.dr.ing. Constantin Brbulescu Cap. 1. Introducere n limbajul C++ Note de curs UPC2 2014-2015
pe monitor se afieaz:
Universitatea Politehnica Timioara
Bd. V. Prvan, nr. 2
pe monitor se afieaz: 11
22
Se observ faptul c C++ trateaz simbolul de linie nou ca pe orice alt caracter: 'A', 'z', '$', '8' etc.
n expresiile de ieire se pot folosi caracterele speciale (coduri backslash) prezentate n Tabelul 1.1.
Tabelul 1.1. Codurile backslash ale limbajului C++
Nr. crt.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Cod
\b
\f
\n
\r
\t
\"
\'
\0
\\
\v
\a
\N
\xN
Semnificaie
Caracter backspace
Caracter avans de pagin
Caracter linie nou
Carriage return (corespunde accesrii tastei ENTER)
Caracter tabulator orizontal (salt de 8 caractere)
Caracterul ghilimele
Caracterul apostrof
Caracterul nul
Caracterul backslash
Caracterul tabulator vertical
Caracterul de avertizare (sunet)
Octal constant (unde N este o constant octal)
Hexazecimal constant (unde N este o constant hexa)
Toate aceste caractere se plaseaz ntre apostrofuri dac se folosesc independent i nencadrate dac se
utilizeaz ntr-un ir.
Exemplu:
cout<<"Anul viitor este "<<2016;
unde n limea cmpului pe care urmeaz s fie afiat valoarea, aliniat la dreapta n cmp. Utilizarea
modificatorului setw(n) solicit introducerea fiierului antet <iomanip>.
Exemplu:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
cout<<"Anul acesta este "<<setw(4)<<2015<<endl;
cout<<"Anul viitor este "<<setw(8)<<2016<<endl;
return 0;
}
pe monitor se afieaz:
Anul acesta este 2015
Anul viitor este
2016
valoarea 2015 este afiat ntr-un cmp de lungime 4 setw(4) , iar valoarea 2016 ntr-un cmp de
lungime 8 setw(8), aliniate la dreapta n cadrul cmpului.
Conf.dr.ing. Constantin Brbulescu Cap. 1. Introducere n limbajul C++ Note de curs UPC2 2014-2015
10
Instruciunea cin arat c datele provin de la tastatur i sunt transmise ctre variabile.
nainte de citirea datelor, se execut o instruciune cout cu indicaii asupra datelor care se introduc.
Exemplu:
1.
{
int a, b, c;
cout<<"Introducei valori ntregi pentru a, b, c i accesai tasta Enter";
cin>>a>>b>>c;
cout<<a<<'\t'<<b<<'\t'<<c<<endl;
return 0;
}
2.
{
int a, b, c;
cout<<"a, b, c =";
cin>>a>>b>>c;
cout<<a<<'\t'<<b<<'\t'<<c<<endl;
return 0;
}
pe monitor se afieaz:
a, b, c =
5
10
15
Dup rularea programului se afieaz:
5
10
15
Folosind cuvntul cheie int s-a precizat faptul c datele introduse de la tastatur sunt de tip ntreg.
Datele se pot introduce de la tastatur n dou moduri:
1. cte una pe un rnd, dup fiecare valoare introdus tastnd Enter (a se vedea exemplele anterioare);
5 (Enter)
10 (Enter)
15 (Enter)
2. mai multe valori pe aceeai linie, caz n care se separ prin Tab, blancuri:
5 tab 10 tab 15
Date introduse trebuie s fie din domeniul tipului variabilelor, altfel va apare o eroare de depire. De
asemenea, datele tastate trebuie s fie de acelai tip cu cel al variabilelor corespunztoare.