Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Clase

c


Clase

Clasa este o reprezentare a unui tip de date abstracte. Ea asigura detaliile de implementare pentru structura de date si pentru operatii. Clasa defineste variabile (atribute) si functii (metode) care implementeaza structura de date si operatiile tipului abstract.



Un obiect este o instanta a unei clase (a unui tip abstract). El este unic identificat prin nume si defineste o stare reprezentata de valorile variabilelor (atributelor 828c23i ) la un moment dat. Comportarea unui obiect este definita de functiile (metodele) definite de clasa ce se pot aplica asupra lui. Definirea unei clase are forma

class nume_clasa

Clasele sunt definite utilizand cuvantul cheie class. Specificatorii de acces sunt public, protected si private. Implicit toti membri clasei sunt privati.

In limbajul C++ avem posibilitatea de a grupa anumite nume in spatii de nume. Prin definitie, datele si functiile unei clase constituie un spatiu de nume ce are numele clasei. Operatorul de rezolutie '::' arata ca un nume de data sau de functie apartine unui spatiu de nume. Operatorul de rezolutie '::' se utilizeaza pentru a defini o functie membru a clasei in afara clasei. Definirea functiilor membre ale unei clase se poate face, fie in interiorul clasei, fie in afara clasei, daca in interiorul clasei s-au declarat ca prototipuri.

Obiectele unei clase sunt create si initializate de functii membre ale clasei special definite pentru acest scop numite constructori. O functie constructor are numele clasei si nu are niciun tip (nu returneaza nicio valoare). Ea are prototipul

nume_clasa(lista de parametri)

Un constructorul unei clase este automat apelat de sistem la crearea unui obiect. O clasa poate avea mai multi constructori. Daca in program nu se defineste niciun constructor, compilatorul genereaza automat un constructor fara parametri, numit constructor implicit. Un tip de constructor este constructorul copiere care creaza o copie a unui obiect.

Obiectele sunt distruse cand nu mai sunt necesare de cǎtre functii membre ale clasei numite destructori. Functia destructor are prototipul

~nume_clasa();

Destructorul unei clase este apelat automat de sistem la distrugerea unui obiect. Destructorul nu are tip si nici parametri.

Apelul unei functii a clasei de catre un obiect se face cu o instructiune de forma

Nume_obiect.nume_functie(lista de parametri) ;

Utilizarea unui camp al unui obiect se face cu expresia

Nume_obiect.nume_camp

Probleme rezolvate

Problema 1. Sa se construiasca o clasa Complex pentru lucrul cu numere complexe. Partile reala si imaginara ale numarului complex sunt memorate in doua variabile tip double. Definitia clasei este

class Complex

Functia cabs() calculeaza modulul numarului complex. Functia conjg() conjuga numarul complex. Functia print() afisaza pe ecran numarul complex.

a) Prima varianta, in care functiile membre sunt definite in interiorul clasei.

#include<math.h>

#include<iostream.h>

class Complex

Complex(double x, double y) ;

double cabs();

void conjg()

void print()

void main()

Rezultatele rularii programului sunt cele de mai jos.

b) A doua varianta, in care functiile membre sunt definite in afara clasei. In acest caz utilizam operatorul de rezolutie '::' pentru a arata ca functiile definite in afara clasei sunt membre ale clasei.

# include <iostream.h>

# include <math.h>

class Complex

Complex::Complex()

;

Complex::Complex(double x, double y)

;

double Complex::cabs()

void Complex::conjg()

void Complex::print()

void main()

In general avem nevoie sa utilizam si sa modificam datele unui obiect in timpul executiei programului. Daca datele sunt declarate private, nu putem face acest lucru direct. O solutie este urmatoarea. Pentru ca o functie externa sa aibǎ acces la membri privati ai clasei, ea trebuie declarata in definitia clasei ca functie prietena, friend. Diagrama sintactica a definitiei unei functii prietene este

friend tip nume_functie ( parametri);

Vom aplica aceasta metoda in cazul definirii unor functii care sa efectueze operatii cu numere complexe.

Problema 2. Se vor construi functii globale care sa efectueze cele patru operatii cu numere complexe definite de clasa Complex din problema anterioara. Fie numerele complexe a = 1 + i, b = -2.3 + 4i, c = 4.1 - 2.2i. Se vor calcula expresiile a + bc*, (a + b)/ (a + c), abc.

#include<math.h>

#include<iostream.h>

class Complex

Complex(double x, double y) ;

double cabs();

friend Complex conjg();

void print()

friend Complex sum(Complex a, Complex b);

friend Complex dif(Complex a, Complex b);

friend Complex mul(Complex a, Complex b);

friend Complex div(Complex a, Complex b);

Complex Complex::conjg()

// sfarsit definire clasa

// definirea functiilor prietene

Complex dif(Complex a, Complex b)

Complex sum(Complex a, Complex b)

Complex mul(Complex a, Complex b)

Complex div(Complex a, Complex b)

void main()

Rezultatele rularii programului sunt cele de mai jos.

Probleme propuse

Problema 1. Sa se defineasca o clasa care sa descrie functia

f(x) = m*x + n

Numele clasei va fi Linie. Clasa va defini doua variabila de tip double, m si n, private. Clasa va defini urmatoarele functii

Constructor cu parametri a si b care va initializa variabilele m si n ale obiectului creat

Constructor tip copiere

Constructor implicit care initializeaza variabilele obiectului la valoarea zero

Functia

double value(double x) ;

care va calcula valoarea functiei in punctul x.

Functiile de acces

double getm();

double getn();

care dau valoarea variabilelor m si n ale obiectului.

Functiile de acces

void setm(double m);

void setn(double n);

care initializeaza variabilele m si n ale obiectului.



Document Info


Accesari: 1063
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )