Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

C


Index » educatie » » informatica » C
» Multiple instante pentru aceeasi clasa


Multiple instante pentru aceeasi clasa


Multiple instante pentru aceeasi clasa

Putem avea mai multe obiecte (instante) apartinand aceleiasi clase.

Dezvoltand exemplul anterior, putem declara al doilea obiect dr2 de tip Dreptunghi

// exemplu: o clasa, 2 obiecte

#include<iostream>



#include<conio.h>

using namespace std;

class Dreptunghi

void Dreptunghi::setValori(int paramLungime, int paramLatime)

int main ()

arie dr: 12

arie dr2: 30   

In acest caz, clasa (tipul obiectelor) pe care o folosim este Dreptunghi. Avem doua instante de tip Dreptunghi dr si dr2. Fiecare obiect are propriile campuri si metode membre. Remarcati faptul ca apelul dr.arie() nu returneaza acelasi rezultat ca si dr2.arie(),pentru ca orice obiect de tip Dreptunghi are propriile campuri lungime si latime. Cand sunt apelate metodele setValue() si arie(), acestea folosesc campurile proprii ale obiectului.

Referinte

In C++ o functie poate primi parametri in 2 feluri - prin valoare sau prin referinta. Transmiterea parametrilor prin valoare este cea obisnuita cunoscuta pana acum din limbajul C. Un parametru transmis prin valoare, daca este modificat in functie, nu isi va pastra valoarea modificata in functia apelant. De exemplu, in programul de mai jos, functia swap() este gresita si nu va avea nici un efect asupra parametrilor primiti:

//exemplu eronat cu parametri valaore

#include<iostream>

#include<conio.h>

using namespace std;

void swap(int a, int b)

int main()

Rezultatul va fi:

In C++ insa putem sa transmitem parametrii prin referinta. In acest caz, modificarile efectuate in functie vor ramane si in functia apelant. Pentru a transmite un parametru prin referinta, in declaratia functiei vom pune & in fata numelui parametrului. De exemplu, functia swap() cu parametri referinta va fi declarata astfel:

void swap(int &a, int &b)

Daca efectuam aceasta modificare in exemplul de mai sus, rezultatul va fi:

Putem utiliza o astfel de functie intr-un algoritm de sortare, in locul functiei cu pointeri cunoscute din semestrul trecut:

void swap(int *pa, int *pb)

Practic, parametrii referinta sunt pointeri catre valorile referite, dar care sunt utilizati in expresii la fel ca variabilele simple.

Este de asemenea posibil sa returnam o valoare prin referinta. In acest caz nu se mai face copierea variabilei din stiva functiei apelate in stiva functiei apelant. De exemplu:

int &max(int &a, int &b)

Referintele au un rol important in combinatie cu clasele. Vom reveni la ele in laboratoarele ulterioare.

Exercitii

Sa se scrie o clasa Data care sa reprezinte o data calendaristica. Clasa va contine urmatorii membri de baza:

campurile an luna zi, intregi, private.

Metoda setValori( . ) care sa seteze valorile celor 3 campuri.

void afisare()- afiseaza data la consola.

Puteti adauga si alti membri daca este cazul.

Pe baza clasei Data sa se implementeze cerintele de mai jos.

Sa se scrie un program care sa citeasca si sa afiseze un vector de n date.

Sa se adauge la clasa Data metoda int maiMare(CData data2) , care realizeaza compararea intre 2 date. Din aceasta metoda sunt accesibile 2 obiecte Data. Unul este obiectul curent, celalalt - parametrul data2. Returneaza 1 daca data curenta (obiectul curent) este mai mare decat data2, in caz contrar 0.

Sa se determine data cea mai mare. Pentru compararea datelor se va folosi functia Data maiMare()

Metoda afisareLunga() - afiseaza data in formatul "29 august 2008". Sa sa afiseze datele citite in ambele formate - normal si lung.

Metoda ziSaptamana(), membra a clasei Data, care sa returneze ziua din saptamana pentru obiectul Data curent. De exemplu, pentru luni va returna 1, iar pentru duminica - 7. Pentru simplitate, sa se considere zilele de saptamana pentru orice an la fel ca pentru anul 2008. De exemplu, pentru datele:

ziSaptamana( va returna:

Metoda afisareCompleta() - afiseaza data in formatul

3 septembrie 2008, miercuri

Metoda va folosi ziSaptamana(). Sa se afiseze datele citite in toate cele 3 formate.

Metoda int diff(Data data2) - returneaza diferenta in zile intre data curenta si parametrul data2. Poate fi atat numar negativ, 0, sau numar pozitiv. Pentru simplitate puteti considera toti anii nebisecti.

Sa se sorteze datele in ordine crescatoare, si sa se afiseze diferentele dintre oricare 2 date consecutive.

De exemplu, pentru datele citite:

Rezultatul va fi:

3 septembrie 2007, miercuri

peste 365 zile -

3 septembrie 2008, miercuri

peste 48 zile -

21 octombrie 2008, marti

Sa se implementeze clasa Multime, care sa pastreze o multime de intregi. Clasa trebuie sa aiba urmatoarele metode publice:

void init() - initializeaza campurile private ale multimii.

void adauga(int) - adauga un element in multime. In cazul in care elementul deja exista, multimea ramane nemodificata.

void extrage(int) - extrage un element din multime. In cazul in care elementul nu era prezent, multimea ramine neschimbata.

void afisare() - afiseaza multimea.

Folositi urmatorul program pentru a testa multimea:

int main()

Indicatie: folositi un vector pentru a stoca elementele.

Sa se implementeze clasa Stiva avand urmatoarele metode:

init - initializeaza campurile private ale stivei.

push - adauga un element in stiva

pop - extrage un element din stiva

top - returneaza varful stivei, fara sa il extraga

print - afiseaza stiva

Folositi urmatorul program pentru a testa stiva:

int main()






Politica de confidentialitate




Copyright © 2024 - Toate drepturile rezervate