Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Declararea claselor

c



+ Font mai mare | - Font mai mic



Declararea claselor

Un tip abstract de date clasa se declara ca si o structura, dar cuvantul cheie struct se inlocuieste cu class. Ca si in cazul structurilor referirea la tipul de data clasa se face cu numele dupa cuvantul cheie class (numele clasei). Protectia datelor se realizeaza cu modificatorii de protectie: private, protected si public. Dupa modificatorul de protectie se pune caracterul ':'. Modificatorul private si protected reprezinta date protejate, iar public date neprotejate. Domeniul de valabilitate a modificatorilor de protectie este pana la urmatorul modificator din interiorul clasei, modificatorul implicit fiind private.



De exemplu clasa vector se poate declara in modul urmator:

class vector

void lapatrat();

void afiseaza();

};

Se observa ca datele membru e si d au fost declarate ca date de tip private (protejate), iar functiile membru au fost declarate publice (neprotejate). Deci programatorul nu are acces la datele membru numai prin functiile membru. Bineinteles o parte din datele membru pot fi declarate publice, si unele functii membru pot fi declarate protejate, daca natura problemei cere acest lucru. In general datele membru protejate nu pot fi accesate numai de functiile membru ale clasei respective si eventual de alte functii numite functii prietene (sau functii friend).

O functie prieten pentru o clasa, se declara in mod obisnuit, dar declaratia trebuie sa inceapa cu cuvantul cheie friend. Declaratia trebuie sa fie in interiorul clasei pentru care functia respectiva va fi functie prieten. Functia prieten se defineste in mod obisnuit, fara cuvantul cheie friend.

Functiile membru ale altor clase pot fi functii prietene pentru o clasa. Daca dorim ca toate functiile membru ale unei clase Clasa_1 sa fie functii prietene pentru o clasa Clasa_2, atunci clasa Clasa_1 se va declara ca si clasa prietena pentru clasa Clasa_2. Acest lucru se poate realiza in modul urmator:

class Clasa_1; // Clasa Clasa_1 se defineste in mod incomplet

// in prealabil, pentru a se putea referi la ea.

// Ea va fi definita in mod complet ulterior.

class Clasa_2

Este insa de dorit sa se evite utilizarea functiilor si claselor prietene pentru a obtine o protectie mai buna a datelor.

In sectiunile 18.2.5. si 18.3.3. vom da exemple de functii prietene, si totodata vom prezenta o modalitate de a evita aceste functii prietene.

O alta observatie importanta referitoare la exemplul de mai sus este ca initializarea datelor membru si eliberarea zonei de memorie ocupata s-a facut prin functii membru specifice.

Datele declarate cu ajutorul tipului de data clasa se numesc obiectele clasei, sau simplu obiecte. Ele se declara in mod obisnuit in forma:

nume_clasa lista_de_obiecte;

De exemplu un obiect de tip vector se declara in modul urmator:

vector v;

Initializarea obiectelor se face cu o functie membru specifica numita constructor. In cazul distrugerii unui obiect se apeleza automat o alta functie membru specifica numita destructor. In cazul exemplului de mai sus

vector(int* e1, int d1);

este un constructor, iar

~vector()

este un destructor.

Tipurile abstracte de date de tip struct pot fi si ele considerate clase cu toate elementele neprotejate. Observam ca constructorul de mai sus este declarat in interiorul clasei, dar nu este definit, iar destructorul este definit in interiorul clasei. Rezulta ca destructorul este o functie inline. Definirea functiilor membru care sunt declarate, dar nu sunt definite in interiorul clasei se face ca si la tipuri abstracte de date de tip struct, folosind operatorul de rezolutie.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 887
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved