Sunteți pe pagina 1din 260
LOW CLUJ-NAPOCA, 2001 AJ [SLs INCEE GC Sl Gre PENTRU PATORI VOLUMUL II UBASUL ( Codd DIACONU ROXANA Feesitare Autor: LIMIU NEGRESCU Aconfruntat cu originalul Irina Mitrov aay poner Zo Beet ta an cicildata site ite astyec odruta Posnaru =—— Fee Bevesteanu aan ella Tart “ EDITURA ALBASTRA comanda 1443/2001 ‘Toate croptuis asupra acestel exit suntrezerate sc, Casa do Ediura Albastra CUPRINS 20. 20.1 202. 20.2.1 20.2.2 2033. 204. 20.5. 20.5.1. 20.5.2. 203.3. 2035.4, 206. 202. 20.8, 208.1. 208.2, 209. 20.10. 20.11 20.12. 20.13, 20.14. 2. 22. 21 222. 223. LIMBAJUL C++ CA EXTENSIE A LIMBAJULUIC ..... eee Comentarin Definigia unei functi Antetul si prototipul unei funeti Exercitii oo... : Corpul uaei functii Tipuri predefinite in C si C+ Constant? caracter F Exercitii Operator: Operatoral de rezolutie Operatoral adress (&) Operatoral de alocare dinamica a memoriei (new). Operatoril de dezalocare a memoriei (delete)... . ‘Apel prir referingé (call by reference) Exercitii Functii care retueaza date de tip referinga Exercitii Modificatori ‘Modificarorul const ‘Modificatorii near, far si huge Cuvintul cheie void Structuri Reuniune . . Tipul enumerare . . Supraineircarea fimetillor Exercitii Funefii inline ‘i : Breet cor PROGRAMAREA PRIN ABSTRACTIZAREA DATELOR ... . . Exercitii ‘ CEASE ocr cess cece eens Definitia claselor Obiecte Domeniul unui nume . 22.10, 24.2 243. 25. 26, 21, Vieibitita Durata de vinta a datelor Alocatea si dezalocarea obicetetor Ininializare Constructor Destructor Exerc Funetie pricten (Friend function) Exercitit SUPRAINCARCAREA OPERATORILOR Exercitit Suprainicarcarea operitorilor new sidelete Exercitit Supraincarcarea eperatorului = Exereitii Supraincarcarea operatorutui [] (operatorul de indexare) Exercitii Supraincarca Exereitit Supraincarcarea operatorului > ea operatoruti ()(operatorul de apel funetie) CONVERSH . Conversia datelor de tipuri predefinite in date de tip abstract, Exercitit ‘ Conversia dintt-un tip abstract intt-un tip predefinit Exereitit Conversia dint-un ip abstract intr-un alt tip abstract Exereitii MODIFICATORUL CONST PENTRU OBIECTE SI FUNCTIH MEMBRU .. ~~. . OPERATORI DE DEREFERENTIERE A POINTERILOR SPRE MEMBRIL CLASELOR (* $12")... s+ Exercitii CONCLUZIL ASUPRA PROGRAMARITI PRIN ABSTRACTIZAREA DATELOR |... 94 94 95 96 105 106 137 140 143 149 177 185 193 198 205 207 218 225 232 235 240 246, 265 267 278 282 296 298 301 305 28. PROGRAMAREA ORIENT. SPREOBIECTE 2. .......005 29. CLASE DERIVATE SI CLASE DE BAZA . . . 29.1 Relatia dintre construetorii si destructorii clasclor de baza si ai elasei derivate Exercitii 292 Conversii 293 Redefinirea datelor membru ale unci clase de baza intr-o elasa derivata 29.4 Suprainearcarea funetiilor membru ale unet clase de baza intr-0 clasa derivata Exercitii 29.5. Clase virtuale Exercitii 30. FUNCTILVIRTUALE ........ Exercitii 5 30,1, Clase abstracte Exercitii 31. INTRARVIESIRE. eee 31.1. Intrarivfesici standard BLL, Iegite standard Exerciti 311.1. Manipulator Exercii 31.1.1.2 Iegire neformatata 31.1.1.3, Supraincarcarea operatorului << pentru iegti de obiecte 31.12. Intare standard Exercitii 31.1.2.1, Intrari neformatate 31.122, Supraincarcarea operatorului >> pentru intrari de abiecte Exerciit 31.2, Formatarea in memorie 31.3. Preluerarea fisierelor Exereitit BIBLIOGRAFIE ........... 20. LIMBAJUL C++ CA EXTENSIE A LIMBAJULUI C fn [14] B. Stroustrup arata ea limbajul C++ este proiectat in asa fel inci = si fie un C mai bun; sa permit stilul de programare prin absteactizaren datelor = si permita stlul de programare oricntat spre obiecte. In aceeasi carte Stroustrup afirma ci C++ este un “C mai bun” deo furnizeaza un suport mai bun pentru stilurile de programare suportate de limbajul c. Amintim ci timbajul C permite utilizatorului si foloseascastilurile de programare ineetitenite sub denumirile de “programare procedurald” (vedi 4.14) si“programare modulard” (vezi capitolul 7). Amibele stiluri sine suporiate mai bine de limbajul C++ pe baza introducerii unor extensii Ia facilitiile cexistente in limbajul C Limbaju! C devine un subset al limbajului C+ (adesea se obignutieste sa se spuiitet C++ este tm superset al limbajuluiC). Aceastainseamna ea un program seri in C este in aecasi timp si un program seri in C+. In Hinit mari, acest Iueru este auevarat, Compatibilitatea mu este asigurata 100% dar eazurile de incompatibilitate sit neesentiale 5i pot fi usor eliminate ta programe concrete. In capitolul de fata se tree in revista extensiile mai importante ale constructilor din C introduse in limbajul C>-¥. Cu alte euvinte, in acest capital se discuta aspectele care conduc la afirmatia lui B. Stroustrup ed limbajul C+ este un C mai bur, Cofelatte fa datelor si ori titi oferite de limbajul C+ (programarea prin abstractizaren A spre obiecte) vor fi abordate in alte capitole, In incheicte, plastic vorbind, putem afirma ca limbajul C++ este un “C inerementat” si injelegem prin aceasta ea pe deo parte este un “C mai bun”. find © extensie a limbajului C, iar pe de alla parte permite stiluri de programare impracticabile in C: ~ programarea prin abstractizarea datclor i ~ programarea orientata spre obieet, 20.1. Comentariu pot fi intro Comentarile siat explicatii pentru programatori.F orice punct in care este legal aparitia unui earacteralb, In limbajul C, § deci sin CHS, comentariile se inelud intre /* (ik cpu ccomentatiului) gi */ (sfirgitul comentariului). Comentariie pot fi serise pe mai aval rind in atara Ue aceasta posibilitate, in limbajul C+ exista si varianta de a serie comientatit pe un singur Find, Un astfel de comentariu incepe cu secventa’ si se termina la sfirgitul rindului. Comentariile de acest fel insojesc, de obicei, cite o instrvctiune sau o componenta a unei instructiuni care necesita explicatii pentru programatori. Comentariile din antetul unei functi se seriu adesea pe mai multe lini si din aceasta cauza ele se insereaza mai simplu folosind conventia din limbajul C. Exemplu: LElb as i < 29) Man biseet >be el =o ale codului In compunerea unui comentariu se pot utili orice caraetere ASCIL Comentarile sin eliminate din programe la compitare. 20.2. Definitia unei functii Definitia unei funetii in limbajul C+ se compune din antet urmat de corpul (0 functie poate f apelata dca este precedata de definitia sau de prototipul ei 20.2.1. Antetul si prototipul unei functii © funetie in mod implicit este global, Ea poate fi localizata intr-un fisier sursé folosind cuvintul cheie static Ia inceputul antetului ei. In acest eaz, se spune ci functia este staticd: ‘0 fanetie poate sa returneze (Intoarea) sau nu o valoare la reveniea din ea. Tipul valor returnate de functie se indica in antetul funesie. In eazal mee funetia nu retumeaza (intoaree) o valoare, in locul tipului din antetul ei se foloseste euvintul cheie void. ‘Antetul unei functi in limbajele C gi C++ are formatul: tip nume(lista deelarayiitor parametrilor format static rip nue (lista dectaratilor parametrilor formati) Dectaratiile de parametti sint separate prin virgula, Dacd funetia nu are parametri, atime lista din parantezete rotunde este vida 8 Spre deosebire de limbajul C, in limbajul C++ se pot face initializari ale ‘Patamettilor formal Exemple: 1. sootean vcalend {int si,int luna, int an = 1998) Incest exempl, parametrul formal an este intializat cu valoarea 1994 2. double arin (dovbie x, double a0, double double piss. 1eis9a6s93e579) Paramettiformali iniialiat se momese parametrit implicit 60, Ls apelul fimctilor, unui parametru implicit poate sii corespunda sau nu un parameiru efeetiv. In eazulin-eare un parametru implicit nu-t corespunde, la ape! uit parameiru efectiv, parametrul formal respectiv ia ea valoare valoarea sa initia‘a, Aceasta se mai numeste valoare inplicits parametrului respectiv. Daca ta un apel, unui parametru implicit i corespunde un parameteuefectv, tunel parametrului formal respectiv ise atribuie in mod obisnuit valoarea pparamettului efecti care ti corespunde, Cu alte cuvinte in acest eaz se neglijeaza valoarea implicta a parametrlui formal D2 exeinpl, apetul funetiel v_calend avind antetul de mai sus vicalend(28,2); implica lansarea functiei v_calend pentru urmatoarele valori ale parametritor forme i 28,luna=2,an= 1994, Pentru ant s-a utilizat valoarea implicita, In schimb apelul: 4 = veatend(31,3,2995) ; lanseaza functia v_calend cu valorile: 1, luna = 3, an = 1995, Incest caz, valoarea implicit a fost negli Le ut ea paramotlor impli ex a ocupe Wm aes oe par ilimbajele Ci C++ sept defn funeli in ramet tn acest eaaita delaratlor paramettorTarmal Conime mma declraile pararetlor eave sintprezeni la orice ape al func. Aces sit aga Mu avaner fis ai functie\ spre dcosebite de cela care se humese parunts aril. Pameti fis preced pe ce varabil. Prezena pramettio ra indicd, in antetul functiei.prin tei puncte care se seriu dupa ultimul parametru fix al netic. a. © limitare in legatura eu pozitia Tista_dec