Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Satisfactia de a face ce iti place. tutorial, lectii online, solutii simple, exmeple, programe, C++

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.

1.     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:

2 3

2 3

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:

2 3

3 2

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.

2.     Exercitii

1.      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.

1.1.  

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

1.2.  

        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 DatamaiMare().

1.3.  

        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:

03.09.2008

03.09.1777

21.10.2008

ziSaptamana() va returna:

3

3

2

        Metoda afisareCompleta() afiseaza data in formatul

3 septembrie 2008, miercuri

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

1.4.  

        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:

03.09.2008

03.09.2007

21.10.2008

Rezultatul va fi:

3 septembrie 2007, miercuri

peste 365 zile

3 septembrie 2008, miercuri

peste 48 zile

21 octombrie 2008, marti

2.      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.

3.      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()



C


Access
Adobe photoshop
Autocad
Baze de date
C
Calculatoare
Corel draw
Excel
Foxpro
Html
Internet
Java
Linux
Mathcad
Matlab
Outlook
Pascal
Php
Powerpoint
Retele calculatoare
Sql
Windows
Word

Clase derivate. Mosteniri
Supraincarcarea operatorului de asignare
Functii prietene
Multiple instante pentru aceeasi clasa
EXPRESII SI INSTRUCTIUNI
Supraincarcarea operatorilor
Clase. Incapsularea
Supraincarcarea functiilor
DECLARATII SI CONSTANTE
Destructori





















 
Copyright © 2014 - Toate drepturile rezervate