Limbajul C++ si oop abc-doar



Yüklə 1,36 Mb.
səhifə1/18
tarix12.09.2018
ölçüsü1,36 Mb.
#81721
  1   2   3   4   5   6   7   8   9   ...   18


****************************

* Limbajul C++ si OOP *

* ABC-doar *

****************************


**********************************

* autor RUSU MIRCEA AUREL VALER *

**********************************

********************************************************

* MOTTO: *

* "Tot ceea ce nu putem sa indeplinim singuri *

* ne limiteaza libertatea." *

* C. PAVESE *

********************************************************

De ce C++ ?

Pentru streamuri si pointeri,pentru tabele virtuale,pentru clase

template si obiecte predefinite,pentru fereastra CPU,pentru

multitudinea de formate...sau poate pentru abilitatea de a lucra

cu memoria RAM,cu memoria de operare,cu memoria fixa sau virtuala,

pentru zeci de biblioteci DLL si ActiveX,sau pur si simplu pentru

a comunica cu calculatorul si/sau cu alte persoane.


C O N T I N U T

Generalitati . . . . . . . . . . . . . . . . . . 1
Concepte fundamentale . . . . . . . . . . . . . 3
Elementele limbajului C++ . . . . . . . . . . . 8
Concepte de structurare a limbajului . . . . . .10
Clase si obiecte . . . . . . . . . . . . . . . .14
Clase derivate . . . . . . . . . . . . . . . . 23
Module,file,containere,unitati,biblioteci . . . 29
Biblioteca OWL (Object Windows Library). . . . 57
Prelucrarea mesajelor Windows (dispatch). . . .107
VDBT (Visual Database Tools) . . . . . . . . . 110
Concluzii . . . . . . . . . . . . . . . . . . 120

-1-

GENERALITATI

Lucrarea fundamentala in care este descris limbajul C++ apartine

autorilor Margaret Ellis si Bjarne Stroustrup si se intituleaza:

"Adnotated C++ Reference Manual".Aceasta lucrare reprezinta standardul

de referinta ANSI si este recomandata oricarui programator care doreste

sa utilizeze limbajul C++.O alta lucrare de referinta,este "C++ in a

Nutshell"" scrisa de Ray Lischner pentru O'Reilley,sau "An Introduction

to C++ Programming" scrisa de Bjorn Fahller.

Limbajul C++ nu este "o limba moarta" ci este in permaneta dezvoltare.

Fiecare autor completeaza acest limbaj cu noi biblioteci de functii sau

obiecte.Pentru a garanta compatibititatea totala,este necesar ca toti

acesti autori sa respecte standardul de limbaj,astfel incat noile dez-

voltari ale limabjului sa fie comprehensibile si usor de aplicat.

Limbajul C++ nu a fost proiectat si planificat meticulos ci a aparut

mai mult ca o necesitate,din dorinta de a tine pasul cu dezvoltarea

continua a resurselor hardware.Din acest motiv,aspectul general este

asemenator cu cel al unui morman de haine "second hand" in care fiecare

client isi cauta marimea,culoarea sau pretul care-i convine.Limbajul

are la baza nucleul C,la care s-au adaugat structuri speciale capabile

sa organizeze datele sub forma de module,denumite "obiecte"(sau clase).

In epoca de pionierat,procesorul principal lucra direct cu memoria

inscriptibila de pe disc.Apoi s-a adaugat un modul de memorie de operare

in care datele erau stocate temporar,pentru a putea fi utilizate mult

mai eficient.Acest modul de memorie a inceput de la 8 si 16 biti,apoi

a inceput sa creasca exponential pana la 4M,8M,16M si 32M (megabiti),

pentru ca in etapa actuala sa ajunga pana la 1 GByte.Ca rezultat,pro-

cesorul principal a inceput sa lucreze cu fragmente de memorie din ce

in ce mai mari,fara sa fie necesar sa apeleze memoria de disc.Practic,

programul se incarca o singura data in memoria de operare,apoi se deru-

leaza ori de cate ori este necesar,sau se executa un numar infinit de

operatii.Cu cat fragmentele de memorie sunt mai mari,cu atat viteza de

operare si eficienta sistemului este mai mare.

Pentru a optimiza la maximum eficienta resurselor hardware,este

necesar ca programele sa fie subimpartite in astfel de fragmente de

memorie denumite module.Fiecare astfel de modul poate contine unul sau

mai multe obiecte,un anumit numar de variabile,constante,functii si pro-

ceduri si o serie de linii de comanda prin care organizeaza operatiile din

modul.Atunci cand se utilizeaza mai degraba obiecte,decat variabile simple

pentru a organiza datele,procedeul tehnic se numeste programare orientata

spre obiect,sau OOP (Object Oriented Programmming).Este destul de evident

ca programarea orientata spre obiect ofera viteze de lucru mult mai mari,

pentru volume impresionante de date.

La inceput,se utiliza mai degraba termenul de structuri de date.Aceste

structuri erau fie cele din tipul struct (din C),fie alte forme de orga-

nizare a datelor cum sunt inregistrarile: (record),tabelele (database),

ariile de date sau de biti,campurile de biti(Bitmap),matricele etc.

Deoarece datele structurate pot fi organizate in nenumarate forme si

formate,s-a impus necesitatea realizarii unui standard comun,astfel incat

datele dintr-un program sa fie compatibile cu cele din alte programe.In

caz contrar,fiecare program trebuie sa posede un set propriu de functii

si proceduri prin care opereaza asupra datelor.


-2-

Bjarne Stroustrup este cel care a propus standardul pentru structu-

rile de date de tip class(obiecte) si a depus un efort considerabil pentru

raspandirea acestui standard printre programatori.Un astfel de obiect

deriva din tipul struct prezent in limbajul C,dar organizeaza acest tip

de data dupa un set standardizat de reguli,astfel incat orice obiect

dezvlotat cu ajutorul acestui standard sa fie usor de inteles si

usor de aplicat sau transformat.Pentru a aplica sau pentru a dezvolta

astfel de obiecte,este necesar sa cunoasteti si sa intelegeti aceste

reguli elementare (incapsulare,mostenire,supraincarcare etc.).

Ca rezultat,datele pot fi organizate mult mai riguros,iar programa-

torii cu forme de expresie si experiente diferite,pot utiliza in comun

aceleasi structuri de date.Cel mai cunoscut exemplu in acest sens este

standardul ActiveX,prin care obiectele definite in limbaje diferite pot

fi apelate din programe scrise in alt limbaj (Exemplu: C++,Pascal,Delphi).

Mai mult decat atat,exista tendinta de a grupa obiectele din acelasi

tip in biblioteci specializate,sau de a crea module independente de pro-

gram,care pot fi apelate din orice alt program.Cele mai utilizate sunt

asa numitele file de resurse (aplicatii grafice,icons,file pentru sunet

sau imagine,file pentru interfata cu resursele hardware etc.).Astfel

de file pot fi apelate din limbaje diferite (Exemplu: Delphi exploateaza

un numar mare de resurse editate in C++).Practic,valoarea unui program

sau a unui sistem de operare este determinata tocmai de capacitatea de

a lucra cu orice format de date,in orice limbaj de programare.Sistemele

de operare moderne se numesc din acest motiv "medii de programare".

Limbajul C++ este ideal pentru realizarea unor astfel de "resurse

software" si reprezinta un instrument de mare valoare in bagajul de cu-

nostiinte al oricarui programator.In plus,C++ a contribuit substantial

la dezvoltarea conceptului de programare modulara si face parte incontes-

tabila din istoria si evolutia limbajelor de programare.

Acest manual nu isi propune o prezentare exhaustiva a acestui limbaj,

ci doar prezentarea cat mai explicita (gen abecedar) a principalelor

notiuni necesare pentru intelegerea si aplicarea acestui limbaj.Pentru

detalii,notiuni teoretice,referinte si date de specialitate exista o

numeroasa bibliografie.Cel mai practic este sa apelati la cartile gratuite

oferite on-line prin Internet.Datele din acest manual se bazeaza pe

Borland C++ Version 5.A Copyright @1991,1996 si pe Microsoft Visual C++

Copyright @ 1994-1998 versiunea 6.0,dar orice alta versiune si implemen-

tare este la fel de buna.

Acest manual este dedicat incepatorilor si celor care mai au inca

destule notiuni neclare,sau nesigure...sau doresc sa afle un alt punct

de vedere decat cel din manualele de specialitate.Parcurgerea acestui

manual nu confera drepturi stiintifice sau administrative,nu va asigura

nici un fel de credit si nici nu va asigura succesul in dezvoltarea unei

cariere tehnice.Acest manual are doar rolul de a va facilita intelegerea

si/sau aplicarea altor surse de informatie.

-3-

CONCEPTE FUNDAMENTALE

Limbajul C++ poate fi utilizat pentru a apela functii si proceduri,

prin care se solicita prelucrarea datelor.Operatiile executate asupra

datelor se pot efectua atat "la nivel inferior",adica la nivel de bit sau

byte,cat si "la nivel superior",adica datele sunt structurate si/sau

suprastructurate in variabile si constante,obiecte sau structuri de date,

file si arii de memorie,etc.

Limbajul C++ nu este cel mai fericit punct de pornire pentru incepatori

deoarece complexitatea notiunilor necesare pentru a intelege modul de

structurare a unui program poate determina o serie de confuzii.Acest

manual presupune existenta unor notiuni elementare de programare liniara,

cunoasterea notiunilor lexicale elementare (variabila,identificator,ope-

rator,cuvant cheie etc.).Pentru initiere puteti utiliza orice manual

pentru C si/sau Pascal (vezi si Limbajul C si C++ ABC-doar ).

Dintre elementele definitorii pentru C++,fac parte stream-urile si

pointerii.Prin stream-uri,programatorul C++ poate controla modul in care

circula datele in calculator,iar prin pointeri programatorul C++ are

acces nu numai la datele prelucrate ci si la adresele de memorie la care

sunt stocate datele respective.Aceste elemente,specifice pentru mediul

C si C++ confera programatorului mijloace de exprimare inexistente in

alte limbaje de programare(sau mult mai dificil de apelat).

Prin stream (curent,flux de date) se intelege in termeni simplisti

o secventa de biti sau un influx de informatie.In calculator,datele

circula sub forma de curenti electrici alternativi,in care fiecare osci-

latie se traduce prin valoarea unui bit.Un astfel de curent,poate fi

intrerupt imediat,sau poate fi extrem de lung.In functie de procedurile

utilizate pentru interpretarea unui astfel de curent,se poate face o

analiza "la nivel inferior",caz in care stream-ul este format dintr-o

secventa succesiva de elemente izolate de tip bit sau byte,sau se poate

face o analiza "la nivel superior" in care stream-ul este format din

elemente cu un format oarecare(numere int sau float,siruri de caractere,

arii de date sau matrice etc.).Ca rezultat,exista un numar extrem de

mare de variante de intrerpretare a datelor contiunute intr-un astfel

de curent(stream).In termeni generali,stream-ul este inteles cel mai

frecvent ca o fila virtuala,localizata in memoria de operare,care poate

fi utilizata fie ca sursa,fie ca destinatie,pentru un grup de biti(ordo-

nati in structuri formatate sau sub forma de sir de elemente).Spre deose-

bire de memoria inscriptibila (hard-disc),stream-urile au o valoare tem-

porara (au o existenta efemera) dar pot fi scrise si rescrise ori de cate

ori,fara a apela la unitati specializate si fara a uza capacitatea de

stocare a datelor (stream-urile nu uzeaza hardul).In calculatoarele vechi,

cu porturi exclusiv seriale,la un anumit moment dat putea exista un singur

stream activ si eventual cateva stream-uri aflate "pe linie de asteptare"

in memoria auxiliara.Pentru operatiile de intrare a datelor se utiliza

un stream de intrare denumit istream,iar pentru operatiile de iesire a

datelor se utiliza un stream de iesire denumit ostream (i si o provin de

la input si respectiv output).Nu se puteau executa simultan operatii de

intrare si iesire a datelor.In calculatoarele moderne,exista un numar

oarecare de porturi paralele.Ca rezultat,la un anumit moment dat,pot

coexista mai multe stream-uri de intrare si respectiv de iesire a datelor

-4-

din calculator astfel incat se pot executa simultan mai multe operatii.

Streamurile stau la baza operatiilor de multiprocesare paralela.Pentru

fiecare linie de executie (thread) exista cate un stream independent.

Un stream poate sa nu contina nici o data (stream nul) sau poate sa fie

practic infinit(stream neintrerupt).Practic,in momentul in care se

deschide un stream,se deschide la nivel de hardware un port paralel prin

care se vor putea primi sau transmite datele necesare,in momentul potri-

vit.Numarul acestor porturi este limitat.Din acest motiv,programatorul

trebuie sa tina o evidenta stricta a fiecarui stream utilizat.Fiecare

stream deschis si lasat "pe linie de asteptare" reduce din capacitatea

de procesare a unitatii centrale(pana cand eventual se blocheaza complet).

Programele evoluate,mentin automat evidenta stream-urilor cu ajutorul

unor grile de tip tabel si avertizeaza automat in momentul in care

numarul lor devine prea ridicat.In termeni generali,un stream poate fi

interpretat ca si cand ar fi un fragment de memorie,determinat electric

si existent doar temporar in memoria de operare a calculatorului.Modul

de ordonare si gestionare a stream-urilor face diferenta dintre un pro-

gramator calificat si unul incepator.

In C++,toate operatiile de intrare/iesire a datelor sunt mediate prin

streamuri specializate organizate sub forma de obiecte si definite in

unitati specializate.Astfel,comunicarea cu diferitele unitati de intrare

sau iesire a datelor se poate face extrem de simplu,prin apelarea unor

functii sau proceduri simple.Pentru a introduce date in stream se utili-

zeaza obiectul cin si operatorul >> iar pentru a extrage date din stream

se utilizeaza obiectul cout si operatorul <<.

La prima vedere,pare confuziv,deoarece << si >> sunt operatorii pentru

salt binar "left shift" si "right shift".Operatiile sunt posibile deoarece

in unitatea "iostream" utilizata pentru operatiile de tip I/O cei doi

operatori au fost redfiniti,astfel incat sa execute operatia de insertie

si respectiv extractie,pentru fiecare tip de data acceptat de C++.Ca re-

zultat,operatorii se pot utiliza pentru orice tip de data.Acest procedeu

tehnic se numeste "supraincarcarea operatorilor" si este specific pentru

limbajul C++.Daca se utilizeaza in operatii cu valori binare,cei doi

operatori isi mentin si semnificatia initiala si vor executa operatiile

de salt binar.Asadar,prin supraincarcarea operatorilor se intelege metoda

tehnica prin care un anumit operator poate avea semnificatie diferita in

functie de tipul de data cu care lucreaza.In mod similar,operatorul *

poate executa operatia de inmultire,desemneaza un poiner sau respectiv

citeste valoarea unui pointer,etc...

Prin acest artificiu software,functiile printf() si scanf() din uni-

tatea stdio.h (specifice limbajului C) pot fi inlocuite prin expresiile

cout << si respectiv cin >> care sunt mult mai simplu de apelat.Puteti

utiliza in continuare functiile C (printf(),scanf() etc.) dar este reco-

mandabil sa utilizati unitatea "iostream" si obiectele specializate cout

si cin,deoarece sunt proiectate special pentru arhitectura de 32 de biti.

Stream-urile standard stdin,stdout,stderr,stdaux si sdtprn au fost inlocu-

ite prin obiectele cin,cout,cerr etc.

Trebuie remarcat faptul ca in versiunea C++,obiectele cin si cout se

pot utiliza si cu tipuri de date inexistente in limbajul C,cum ar fi

wide string sau tipurile de date definite de catre utilizator.Prima ope-

ratie in C++ este afisarea unui text pe ecran:


-5-

EXEMPLU: (vezi si cplus1.cpp)

#include

#include

main()

{ cout << "Hello world !";

sleep(5);

return 0;

}

Pentru a edita exemplul,alegeti din File optiunea New,apoi Project,iar

in fereastra New Target introduceti numele proiectului(in loc de proj0000)

si schimbati calea de acces(daca este necesar).Este bine sa creati un

director special in care sa arhivati toate proiectele,sau sa utilizati

cate un director nou pentru fiecare proiect.Apoi utilizati Browse pentru

a selecta calea de acces la directorul dorit.Confirmati cu OK.

C++ va crea automat filele .cpp,.def si .rc necesare pentru proiect.

Filele vor fi afisate in fereastra Project,sub forma de arbore de rami-

ficatie cu nodul principal in fila .exe (proiectul va utiliza cele trei

file pentru a compila si construi fila executabila).

In etapa actuala nu este necesara decat fila .cpp.Selecati cu un click

drept de mouse celelalte doua file si alegeti optiunea Delete node pentru

a sterge cele doua file din proiect.Apoi deschideti fila .cpp cu un

dublu click si editati textul de mai sus.Compilati,construiti proiectul

cu Build all apoi convertiti executabilul cu Make all.

Daca nu a intervenit nici o eroare,puteti executa proiectul cu Run,sau

cu butonul pe care este desenat un trasnet (butonul Run).

La executie,se va afisa o fereastra Dos in care se va afisa textul

"Hello world" timp de 5 secunde.Fereastra Dos nu are autostop,astfel

incat este necesara o functie de intarziere pentru a putea observa mesa-

jul dirijat catre ecran.Pentru unele compilatoare este necesar sa repor-

niti programul inainte de a putea fi executat.In acest caz (daca fereastra

de debug afiseaza zero erori),salvati fila,inchideti programul si apoi

lansati din nou C++ si deschideti fila cu Open.Aceasta operatie este

necesara pentru a realiza "link-ul",adica o cale de acces spre adresa de

memorie la care este arhivata fila.Daca nici in acest caz nu observati

fereastra Dos,micsorati fereastra Windows in care este deschis programul

C++ (este posibil ca fereastra sa se deruleze in spatele ferestrei Win-

dows -care are precedenta),sau verificati in Help definitia exacta pentru

functia Sleep() (in unele versiuni parametrul functiei este exprimat in

secunde in timp ce in versiunile recente este exprimat in milisecunde)

si ajustati valoarea astfel incat sa fie compatibila cu versiunea insta-

lata(Exemplu: in Visual C++ utilizati 5000 de milisecunde).

In continuare,puteti utiliza diferite tipuri de date.Incercati sa

utilizati cout impreuna cu numere de tip int,float,double etc.

Pentru a nu incurca cei doi operatori,puteti utiliza urmatoarea regula:

varful unghiului este orientat spre destinatie iar deschiderea unghiului

este orientata spre sursa.

EXEMPLU : cout << "Hello world !"

sursa este sirul de caractere "Hello world !" iar destinatia este

obiectul stream "cout" (care va dirija fluxul de informatii spre ecran).

In mod similar,streamurile intermediaza orice schimb de date dintre

procesor si uinitatile de executie din calculator.

-6-

EXEMPLU: (vezi si cplus2.cpp)

#include

#include

main()

{

cout << "Introduceti raza cercului: \n";

cout << "Click in fereastra,apoi valoarea si Enter!) \n";

float numar=0;

cin >> numar;

cout << "Aria cercului este: \n";

numar=numar*numar*3.141592;

cout << numar;

cout << "\n\n Apasati orice tasta !";

getch();

return 0;

}

In exemplu de mai sus,se realizeaza deja o comunicare intre procesor,

tastatura si ecran.Pentru a introduce datele de la tastatura este

necesar un click de mouse care sa selecteze ecranul.Dupa ce datele intro-

duse sunt afisate pe ecran,tastati Enter pentru confirmarea lor.

Yüklə 1,36 Mb.

Dostları ilə paylaş:
  1   2   3   4   5   6   7   8   9   ...   18




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin