|
Cu alte cuvinte,variabila va avea o durata statica,adica este alocata
|
səhifə | 2/55 | tarix | 07.05.2018 | ölçüsü | 4,6 Mb. | | #50260 |
| 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.
Dostları ilə paylaş: |
|
|