Limbajul c si C++ abc-doar


Cu alte cuvinte,variabila va avea o durata statica,adica este alocata



Yüklə 4,6 Mb.
səhifə2/55
tarix07.05.2018
ölçüsü4,6 Mb.
#50260
1   2   3   4   5   6   7   8   9   ...   55

Cu alte cuvinte,variabila va avea o durata statica,adica este alocata

la inceputul programului si dealocata la sfarsitul programului,iar daca

nu are o valoare prestabilita va fi initializata zero.

In C++,daca se modifica un membru dintr-o clasa,static specifica faptul

ca o copie a membrului respectiv este partajata de toate instantele

(evenimentele) clasei respective.Daca se modifica functia unui membru

din definitia unei clase,atunci functia acelui membru va putea fi acce-

sata doar de catre membrii statici.

EXEMPLE: static int i

static void printnewline(void){}
struct []{[];...}

[];

-se utilizeaza in mod explicit pentru declararea unei structuri.

In C++,dupa declararea tipului de data nu mai este neaparat necesar

sa se declare explicit structura cu struc.


-8- [struct-switch]

EXEMPLE: struct PERSON //declaratie PERSON struct (tip)

{

int age;

long ss //declaratie membri (tipuri)

float weight;

char name[25];

} family_member; //defineste obiectul

struct PERSON sister //declaratie in stil C

PERSON brother //declaratie in stil C++

sister.age=13

brother.age=7 //se atribuie valori membrilor

Pentru initializarea variabilelor,valorile trebuie trecute intre

acolade.

EXEMPLU: struct POINT //declara structura

{

int x;

int y; //se definesc membrii x si y

} spot={20,40} //variabila spot are valorile

// x=20 si y=40

struct POINT trei //variabila trei e de tip POINT
O structura grupeaza mai multe valori intr-o singura inregistrare.

Atat numele structurii cat si definirea obiectului sunt optionale,dar

una dintre ele trebuie sa apara.Elementele structurii sunt separate

prin virgula.Datele si variabilele de tip diferit sunt separate prin

punct si virgula.

Pentru a accesa ulterior unul dintre elementele structurii,se va uti-

liza un selector al inregistrarii de tip (prin punct).

EXEMPLU : strcpy(family_member.sister,"Ana Maria");

Pentru a declara variabile aditionale de acelasi tip,se va utiliza

struct urmat de numele structurii si apoi de numele variabilei(obiect-

ului).

EXEMPLU: struct PERSON family_member[11];
switch ()

-este o comanda prin care controlul evalueaza expresia si apoi executa

comanda din

Comanda din poate fi ramificata,caz in care se va executa

acea parte a expresiei care corespunde evaluarii expresiei .

Atat cat si constantele din ramificatiile tre-

buie sa returneze o valoare de tip int(intreg),pentru ca sa se poata

evalua compatibilitatea lor.

Ramificarea se face prin cuvantul cheie case.

EXEMPLU: switch (c)

{

case 'A':

capa++;

case 'a':

lettera++;

default:

total++;

}

-9- [union-void]

typedef ;

-atribuie numele specificat prin si tipul de data speci-

ficat prin unei variabile,structuri

EXEMPLE: typedef unsigned char byte;

typedef char str40[41];

typedef struct {double re,im;}complex
union[]{;...}[];

-este identica cu struct,permite declararea de uniuni.

In plus,permite definirea unor variabile care partajeaza spatiul de

stocare.

EXEMPLU: union int_or_long {

int i;

long l;

} a_number

in exemplul de mai sus,se va aloca destul spatiu de memorie pentru

a_numar,cat sa poata acomoda cel mai lung element din uniune.Dar,spre

deosebire de structuri,variabilele a_number.i si a_number.l ocupa

aceeasi locatie de memorie (se suprascriu reciproc).Astfel,stocarea

de date in una dintre variabile o va suprascrie pe cealalta.

Elementele unei uniuni se acceseaza la fel ca si cele ale unei struc-

turi.

In versiunea C,o uniune poate contine doar membri de tip data.

In versiunea C++,o uniune este o forma limitata de clasa.Poate contine

specificatori(public,protected,private),membri data,membri functie(in-

clusiv constructori si destructori).Nu poate contine functii virtuale,

membri data de tip static si nu poate fi utilizata ca si clasa de baza

nici nu poate contine clase de baza.Accesul implicit la membrii uniunii

este de tip public.
unsigned;

-este un modificator (reversul lui signed)

unsigned char determina lungimea datelor la 1 octet(8 biti) si domeniul

intre 0 si 255 iar unsigned long determina lungimea datelor la 4 octeti

(32 biti) si domeniul de valori intre 0 si 4294967295.

EXEMPLE: unsigned char x

unsigned long int numar
void

-declara un tip de data vida

Daca se utilizeaza impreuna cu o functie,void specifica faptul ca fun-

ctia nu returneaza nici o valoare.

EXEMPLU: void hello(char*name)

{ printf ("Hello,%s.",name);}

Daca se utilizeaza in declararea functiei,void inseamna ca functia nu

accepta nici un fel de parametri.

EXEMPLU: int init(void)

{ return 1;}

Si pointerii pot fi declarati ca void(nu mai pot fi eliberati fara o

solicitare explicita deoarece nu se poate determina dimensiunea obiect-

ului spre care se orienteaza pointerul.(Exemplu: void*p=&x;)


-10- [volatile-while]

volatile ;

-este un declarator al tipului de date care specifica faptul ca

obiectul respectiv(variabila) poate fi modificat in interiorul pro-

gramului si in afara declaratillor (din background),sau din afara

programului (sistemul de operare,din hardware,din alt program con-

comitent.

EXEMPLU: int volatile nVint

Obiectele declarate volatile pot sa-si schimbe valoarea in orice

moment.Una dintre aplicatii este pentru a permite accesul la locatiile

de memorie utilizate de procesele asincrone ca nivele de intrerupere.
while ()

-realizeaza o bucla de repetitie in care se va repeta

atat timp cat evaluarea expresiei din ramane diferita

de zero (returneaza true).Evaluarea se face inaintea fiecarei executii

EXEMPLU: while (*p== ' ' ) p++;

Daca valoarea pentru este evaluata false de la inceput,

bucla nu va mai fi executata de loc-controlul trece la linia urmatoare

Bucla poate fi intrerupta prin break,goto sau return.

In mod obisnuit,operatia din statement modifica evaluarea pana cand se

returneaza false (zero).

EXEMPLU: while ( i>=0 )

{

string_1[i]=string_2[i];

i--;

}

in acest exemplu se copiaza sirul string_2 in sirul string_1 si se

decrementeaza progresiv valaorea lui i pana cand devine zero si se

executa iesirea din bucla (evaluarea returneaza zero).

Acestea sunt cuvintele cheie ale limbajului C.Ele se gasesc implemen-

tate in aproape toate versiunile de C,dar este bine sa consultati si

Help-ul versiunii d-voastra pentru conformitate.In prezent,nu se mai

lucreaza decat cu versiuni de C++ si Visual C++,care au implementate toate

cuvintele cheie(si altele auxiliare),dar in anumite configuratii de hard-

ware,sau pentru economisirea memoriei,exista persoane care prefera ver-

siunile originale ale programelor.

In limbajul C,toate cuvintele cheie se scriu exclusiv cu litere mici.

Scrise cu majuscule,cuvintele cheie au alta semnificatie(Exemplu: else

este un cauvant cheie,iar ELSE nu este).Cuvintele cheie din limbajul C

sunt cuvinte rezervate (nu pot fi utilizate pentru denumirea de variabile

sau obiecte etc.).

Toate programele scrise in limbaj C sunt alcatuite din una sau mai

multe functii.Prima functie apelata se numeste main(),contine in esenta

o schema rezumat a programului compusa din apeluri ale altor functii.

Prezenta functiei main() este obligatorie (chiar daca nu contine schema

rezumat).Si main() este un cuvant rezervat(nu se va utiliza pentru nici un

alt scop in program).

Elementul de baza al unui program,recunoscut de catre compilator,poarta

numele de token.Token este acel element al programului care nu poate fi


-11- [auto-catch]

descompus de catre compilator in alte elemente componente.Exemple de

token sunt:cuvintele cheie,identificatorii,constantele,sirurile de

caractere,operatorii,punctuatorii,paratntezele drepte [],rotunde () si

acoladele {},virgula etc.

Programul se structureaza sub forma de sir de declaratii.Pentru a

putea fi executat,sirul de declaratii este citit de catre un program

denumit compilator,care verifica daca solicitarile sunt corecte si apoi

le transcrie in limbaj masina.In continuare,programul va fi citit de

catre un alt program,numit interpretor de comenzi,care verifica fiecare

linie si apoi executa comenzile.

Programul C++(si Visual C++) a mai adaugat alte 30 de cuvinte cheie,

care diversifica in continuare modalitatile de expresie.Aceste cuvinte

cheie sunt:auto,bool,catch,class,const_cast,delete,dynamic_cast,explicit,

false,friend,inline,mutable,namespace,new,operator,overload,private,

protected,public,reinterpret_cast,static_cast,template,this,throw,true,

try,typeid,using,virtual,wchar_T.

Semnificatia lor este urmatoarea:
auto;

-este un declarator ce indica faptul ca variabila are extindere doar

locala(automatic).Este valoarea implicita a specificatorului de clasa

pentru declaratiile de blocuri de valori.

Este rar utilizat,deoarece este executat implict.

EXEMPLE: auto int i // declaratie explicita pentru auto

int j // este implicit tot auto
bool;

-este un declarator specific C++.Desemneaza un tip de date.O variabila

din acest tip accepta valorile "true" sau "false". Toate expresiile

conditionale returneaza o valoare de tip bool (boolean).

Daca o variabila de tip boolean are prefixul sau postfixul ++,atunci

variabila va fi setata true (operatorul -- nu se poate aplica).

Variabilele de tip boolean pot fi transformate in variabile de tip

int(integer),caz in care true devine 1 iar false devine 0.

EXEMPLE: bool i

sizeof(bool)
catch (exception-declaration) compound-statement

-este specific pentru C++ si se utilizeaza pentru comenzile de mane-

vrare a erorilor.

Se utilizeaza pentru a recupera(prinde) dintre erorile tratate si

eliberate de catre throw pe cele specificate prin declaratia de ex-

ceptii exception-declaration.

EXEMPLU: catch(CFileException*e)

{

::GlobalUnlock((HGLOBAL) hDib);

throw;

}

Datele recuperate cu catch pot fi de orice tip,inclusiv clase C++.

-compound-statement este expresia care declanseaza clauza de manevrare

a exceptiilor,la care catch filtreaza erorile eliberate de throw.

-12- [class-delete]

class [tag[:base-list]]

{

member list

} [declarators];

[class] tag declarators;

-este cuvantul cheie care defineste tipul unei clase sau defineste un

obiect al unei clase.

In sintaxa definitiei (vezi mai sus):

-tag denumeste tipul clasei.In interiorul clasei respective,denumirea

din tag devine cuvant rezervat(nu se poate utiliza pentru alt scop).

-base-list specifica din ce clasa provine clasa definita (clasa de

baza) si poate fi precedat de un specificator de tip (public,private,

protected) sau de cuvantul cheie "virtual"(care adauga si nivelul de

acces la clasa respectiva de obiecte).

-member list declara membrii clasei si elementele "friend".Membrii pot

fi functii de date,campuri de biti,nume de tipuri sau alte clase (in-

tricate).Elementele "friend" pot fi functii sau alte clase.Datele nu

pot fi initializate explicit.Tipul clasei nu se poate autoinclude sub

forma de membru al sau nonstatic,dar poate contine un pointer care se

refera la propria clasa.

-declarators declara unul sau mai multe obiecte din clasa respectiva

EXEMPLU: class CAboutDlg : public CDialog

{

public:

CAboutDlg();

protected:

virtual void DoDataExchange(CDataExchange*pDX);

};

clasa CAboutDlg seriva din clasa de baza CDialog si contine ca membru

functia denumita CAboutDlg().

In general,o clasa de obiecte poate fi privita ca un fel de subrutina,

sau ca o procedura din limbajul FoxPro.Au rostul de a grupa mai multe

elemente de programare,pentru a facilita derularea programelor.
const_cast (expresion)

-este un operator care se poate utiliza pentru a elimina atributele:

const,volatile sau _unaligned ale unei clase de obiecte.

Astfel,un pointer catre oricare dintre membrii de date sau catre un

obiect,va putea fi convertit intr-un obiect identic dar fara atributul

const,volatile sau _unaligned.In functie de tipul obiectului,opera-

tiile ulterioare de scriere pot avea rezultate inpredictibile(prin

pierderea atributului se pot influenta functiile care depind de

obiectul respectiv si pot genera rezultate aberante).
delete

-este comanda prin care se pot sterge segmente de date dintr-o fila.

Comanda se aplica si pentru unitatile digitale video sau audio.

Daca stergerea datelor s-a executat cu succes,se returneaza zero,iar

in caz contrar se returneaza un mesaj de eroare.

EXEMPLU: delete mysound from 1 to 900

va sterge din fisierul audio datele intre 1 si 900 milisecunde.


-13- [dynamic-friend]

dynamic_cast (expression)

-converteste operandul din "expression" in tinta pointer-ului din

"type-id".Type-id trebuie sa fie un pointer,sau o referinta la una

dintre clasele definite anterior,sau un pointer void.Daca este un

pointer,atunci si "expression" trebuie sa fie tot un pointer,iar

daca type-id este o referinta,atunci "expression" trebuie sa fie

o data de tip l-value(de tip nonvoid,denumesc o variabila si apar

la stanga definitiei).

In urma operatiei rezulta un pointer spre un subobiect al clasei

respective(gen selectarea unui subdirector dintr-un director).

EXEMPLU: class B {...};

class C: public B {...};

class D: public C {...};
void f(D*pd)

{

C*pc=dynamic_cast(pd);

B*pb=dynamic_cast(pd);

}

in acest exemplu,pointerul pc este orientat spre subobiectul C din pd

iar pointerul pb este orientat spre subobiectul B din pd.

Observati ca exista atat un obiect B cat si un subobiect B(inclus in

clasa C).O formulare ambigua determina eroare,deoarece pointerul nu

stie unde sa directioneze cursorul(idem si pentru C).
explicit

-este un specificator ce poate fi aplicat doar in declaratiile de

constructie a unei clase de obiecte si determina faptul ca acele

obiecte sa nu poata fi incluse in conversii implicite(doar in cele

solicitate explicit).

EXEMPLU: class X {

public:

explicit X(int);

explicit X(double)

};

Nu are sens sa utilizati acest specificator pentru functii cu valori

multiple,deoarece functia nu va putea fi utilizata in conversii

implicite(va trebui specificata valoarea explicit la fiecare con-

versie).
false

-este una dintre cele doua valori ale unei variabile de tip boolean.

EXEMPLU: x=false

atribuie variabilei x valoarea logica false(neadevarat).
friend

-este cuvantul cheie prin care o functie sau o clasa de obiecte va

putea avea acces si la membri protejati ai unei alte clase de obiecte

Prin cuvantul cheie "friend" se specifica faptul ca functiile si

clasele de obiecte pot avea acces si la membri "protected" sau

"private" ai clasei respective(nu doar la cei declarati "public").


-14- [inline-namespace]

inline

-este identic cu _inline si permite ca la compilarea unui program,sa

se introduca expresia intrega a unei functii,ori de cate ori aceasta

este solicitata in cadrul programului(prin numele sau).Insertia poate

avea loc doar daca analiza cost/beneficii determina un rezultat pro-

fitabil(cresterea vitezei de operare justifica spatiul ocupat).

Asemenator este si _forceinline care executa aceeasi operatie fara sa

mai faca analiza cost/beneficii.Nu este intotdeauna recomandabil sa

se aplice aceasta metoda,deoarece in unele situatii,spatiul de memorie

ocupat creste foarte mult iar viteza de operare in loc sa creasca este

aceeasi sau chiar mai mica(prin citirea explicita a functiilor).

EXECEPTII:-inline nu se poate aplica daca:

-functia sau functia apelanta este declarata cu /Ob0 (optiunea impli-

cita pentru debug)

-functia sau functia apelanta utilizeaza metode diferite de tratare a

exceptiilor (si erorilor)

-daca functia are o lista de argumente variabila

-daca functia utilizeaza asamblarea inline dar nu este compilata cu

/Og,/Ox,/O1 sau /O2

-daca functia returneaza obiecte cu valori neportabile(prea mari) si

nu este compilata cu /GX,/EHs sau /EHa

-daca functia este recursiva(repetitiva) si nu este acompaniata de

"#pragma".Cu "#pragma",functiile recursive pot fi compilate cu inline

pana la o adancime de opt solicitari.Pentru a schimba adancimea se

poate utiliza #pragma(inline depth,n).

EXEMPLU: inline int max(int a,int b)

{

if( a > b ) return a;

return b ;

}

Se recomanda mai ales atunci cand definitia functiei este mai scurta

decat denumirea ce o desemneaza sau cand apelarile sa fac de la dis-

tante foarte mari(daca programul trebuie sa faca salturi foarte mari

intre liniile de program).
mutable

-se poate aplica doar datelor non-static si non-const.Datele declarate

mutable pot fi utilizate pentru atribuire de valori dintr-un membru al

unei functii declarate "const".Pot accepta valori.
namespace [identifier]{namespace-body}

-este un declarator ca atribuie un nume unei regiuni declarate

"identifier" este numele de identificare declarat si trebuie sa fie

unic in interiorul regiunii in care este declarat si va fi utilizat

pentru discriminarea(identificarea) membrilor din regiunea respectiva.

Numele regiunii declarate "namespace-body" este inclus in namespace.

EXEMPLU: namespace Clienti { Nume; }
Namespace poate contine date sau declaratii de functii,incluse in

{namespace-body} sub forma de secventa de instructiuni,care se va

spune ca sunt membri ai namespace .


-15- [new-overload]

new

-este un operator utilizat pentru a aloca un obiect nou la stiva de

memorie.Nu se poate utiliza pentru a aloca o functie noua,dar se

poate utiliza pentru a aloca un pointer spre o functie.

EXEMPLU: float (*cp)[25][10];

cp=new float[10][25][10];
operator

-este cuvantul cheie utilizat pentru supraincarcarea unui operator.

Yüklə 4,6 Mb.

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




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