Administratie | Alimentatie | Arta cultura | Asistenta sociala | Astronomie |
Biologie | Chimie | Comunicare | Constructii | Cosmetica |
Desen | Diverse | Drept | Economie | Engleza |
Filozofie | Fizica | Franceza | Geografie | Germana |
Informatica | Istorie | Latina | Management | Marketing |
Matematica | Mecanica | Medicina | Pedagogie | Psihologie |
Romana | Stiinte politice | Transporturi | Turism |
Polimorfism si functii virtuale
Functii virtuale
Functiile virtuale se folosesc pentru a inlocui o functie membru a unei clase de baza,
astfel incat aceasta sa functioneze corect atat in situatii statice cat si in situatii
dinamice.
O functie virtuala se declara prefixand prototipul sau cu cuvantul virtual.
Despre functiile virtuale trebuie facute urmatoarele observatii:
Daca o functie este declarata virtuala intr-o clasa de baza ea va fi virtuala pentru
toate clasele ulterioare derivate. Nu este necesar ca in clasele derivate sa se specifice
cuvantul cheie virtual.
Nu este necesar ca in clasele derivate sa se suprapuna o functie virtuala peste cea din
clasa de baza. In acest caz se folosesc functiile din clasa de baza.Astfel pot fi declarate
functii virtuale numai in clasa de baza fara a fi suprapuse in clasele derivate anticipand
o dezvoltare ulterioara a programului.
O functie virtuala nu poate fi declarata ca un membru static al unei clase.
Operatorul de rezolutie este mai puternic decat mecanismul de functie virtuala
O functie virtuala poate fi declarata friend de catre o alta clasa.
Un exemplu:
class C;
class A;
class B:public A;
class C
void A::raport(C& cobj)
void B::raport(C& cobj)
void main()
Se obtine:
Raport din B -1
In acest exemplu se apeleaza functia raport care suprapune functia virtuala din clasa de
baza.
* Spre deosebire de functiile supraincarcate care nu pot avea aceleasi tipuri de argumente
explicite, functiile virtuale trebuie sa aiba aceleasi tipuri de argumente si acelasi numar
de argumente. Este usor sa se comita erori legate de acest lucru cand se declara functii
virtuale.
Un exemplu:
class A
class B:public A
void main()
Rezultatul obtinut este 19 deoarece functia f nu este virtuala ci supraincarcata, deoarece
argumentul sau este de tip char in B, iar in A tipul unsigned char. Astfel, cand se apeleaza
f prin p se foloseste versiunea din A deoarece in B nu avem o versiune care sa inlocuiasca
functia virtuala.
Functiile virtuale se folosesc in urmatoarele situatii:
1) Cand se lucreaza cu tablouri de pointeri la obiecte eterogene.
Un exemplu:
class data_android
class intrus_android:public data_android
void main()
Clase abstracte
In proiectarea OOP, clasa de baza trebuie sa fie foarte generala. Toate detaliile sunt
in clasele derivate.Uneori este indicat sa se creeze o clasa de baza atat de generala,incat
sa nu fie folosita nici la crearea de obiecte, ci doar ca un cadru-suport de la care se
porneste in definirea obiectelor.
O clasa abstracta este o clasa care cuprinde cel putin o functie virtuala pura, folosind
sintaxa:
virtual tip nume_functie(arg) = 0
Exista 2 reguli ce trebuie respectate pentru clasele abstracte:
sa contina cel putin o functie virtual pura;
nu pot fi utilizate ca tip pentru un argument, ca tip de retur al unei functii, ca tip
al unei conversii explicite si, mai ales, ca tip al unui obiect.
Compilatorul nu permite crearea de obiecte din clasa abstracta, ci doar din clasele derivate
si doar cu conditia ca aceste clase derivate sa furnizeze corpuri pentru functiile virtuale
pure.
Functiile virtuale pure se mostenesc ca si functiile virtuale obisnuite.
Intr-o clasa abstracta o functie este obligata sa aiba definitie, doar daca este apelata
folosind operatorul de rezolutie pentru a o localiza.
Un exemplu:
class fruct
virtual void CeEste()=0;
class portocala:public fruct
void CeEste()
void main()
Se obtine:
constructor de baza
constructor din derivata
Numele este portocala
Probleme propuse:
1.Se prezinta in continuare descrierea unei ierarhii de
clase:
Pe marginea unui bulevard se pot plasa urmatoarele elemente arhitectonice
(caracterizate de elementele specificate):
- spatii verzi: indicativ, lista plantelor/arborilor ce se pot planta pe acel
spatiu, dimensiuni;
- case: indicativ, cu/fara etaj, numar de camere, numarul maxim de persoane ce
le poate adaposti, dimensiuni;
- blocuri: indicativ, numar de etaje, cu/fara magazine la parter, dimensiuni,
inaltime;
- magazine: indicativ, dimensiuni, inaltime.
Sa se ofere functii pentru:
a) completarea tuturor zonelor de pe latura bulevardului (numarul de zone e dat
la rulare);
b) modificarea unei zone
c) 'darimarea' continutului unei zone
d) parcurgerea 'bulevardului' si afisarea 'constructiilor'
Pentru aceasta ierarhie se cere sa se implementeze aceasta ierarhie folosind
tehnica OOP a claselor abstracte (care inglobeaza tot ceea ce este comun intr-o
ierahie) si tehnica metodelor virtuale: toate functiile care se pot modifica pe
nivelele 'inferioare' ale ierarhiei sint virtuale.
2.Sa se realizeze o ierarhie de clase care
descrie multimea elementelor din plan intalnite in geometrie. Se considera
clasa de baza CPunct , din ea se
deriveaza clasa CDreapta , clasa CCerc , clasa CDreptunghi , clasa CPatrat .Pentru
clasele CCerc,CDreptunghi si CPatrat sa
se implementeze o functie de calcul a ariei si o functie pentru calculul
perimetrului, functii ce vor fi declarate ca functii virtuale in clasa de baza.
3.Sa se construiasca o ierarhie de clase
care descrie rasele de caini.Se considera clasa de baza Caine , din ea se
deriveaza clasa CaineCuPete , clasa CaineFaraPete . Despre un caine se cunosc :
numele, inaltime, greutate, varsta, culoare.Despre cainii cu pete se stie si
numarul de pete. Sa se defineasca pentru fiecare clasa o functie de citire a
datelor, respectiv una de afisare; ambele functii vor fi functii virtuale.
4.Sa se construiasca o ierarhie de clase
care sa simuleze functionarea unei retele de calculatoare. Reteaua admite maxim
10 utilizatori si furnizeaza protectie prin parola si functii pentru conectare
si deconectare. Reteaua este gestionata de un administrator.Pentru fiecare
utilizator se cunoaste parola si numele. Administratorul este la randul sau tot
un utilizator care are anumite facilitati in plus : poate vizualiza toti
utilizatorii retelei, poate deconecta unul sau mai multi utilizatori , poate
schimba setul de comenzi functionale.
Sa se realizeze clasa CRetea care va avea un nume, un numar de maxim 11
utilizatori din care unul singur poate fi administrator.
5.Sa se realizeze o ierarhie de clase care descrie habitatul animalelor dintr-o
rezervatie naturala. In rezervatie pot fi intalnite urmatoarele animale
:iepuri,ursi,caprioare,vulpi si lei.Unele dintre animale sunt ierbivore,alte
carnivore sau chiar ierbivore si carnivore.Ierarhia de clase va avea clasa de
baza CAnimal, clasa abstracta, din care se vor deriva doua clase :
CAnimalIerbivor si CAnimalCarnivor. Pentru fiecare tip de animal vom avea o
clasa corespunzatoare care se va extinde din una din clase de mai sus, sau din
ambele, corespunzator modului de hranire a animalului.
Despre un animal se cunosc urmatoarele informatii comune : nume, data
aducerii,greutate,hrana preferata, cantitate pe zi. In plus despre iepure se
cunoaste suprafata minima pe care poate trai;despre vulpe - temperatura maxima
de trai, tip (polara, indigena); despre leu - temperatura minima suportata,
tara de provenienta;despre urs - perioada de hibernare; despre caprioara -
numarul de pui. Pentru fiecare clasa se vor implementa atat o functie de citire
a datelor , cat si o functie de scriere a acestora, functii ce vor fi declarate
ca functii pur virtuale in clasa de baza CAnimal. Sa se construiasca o clasa
CRezervatie care va contine o multime de animale.Sa se populeze rezervatia.
6.Se prezinta in continuare descrierea unei
ierarhii de clase:
Clasele sociale din istorie pot fi caracterizate prin urmatoarele elemente
definitorii:
- sclav = nume, nume stapin
- stapin = nume, numar de sclavi
- iobag = nume, nume stapin, venit anual
- feudal = nume, suprafata de pamint detinuta, titlu
- proletar = nume, salariu lunar
- capitalist = nume, numar de fabrici detinute
O 'carte de istorie' poate fi considerata ca o 'lista' de
astfel de categorii/persoane.Fiecare clasa sociala are propriul
'salut'. Sa se afiseze saluturile tuturor persoanelor dintr-o
'carte de istorie' de la un moment dat.
Pentru aceasta ierarhie se cere:
1. Sa se implementeze aceasta ierarhie folosind tehnica OOP a claselor
abstracte (care inglobeaza tot ceea ce este comun intr-o ierahie) si tehnica
metodelor virtuale: toate functiile care se pot modifica pe nivelele
'inferioare' ale ierarhiei sint virtuale.
2. Fiecarei clase sa i se ofere constructori, destructori si functii specifice,
corespunzatoare.
3. Prelucrarea obiectelor din aceasta ierarhie in mod uniform se poate face
prin tehnica 'listelor eterogene': intr-o structura tip lista
(tablou, lista simplu/dublu inlantuita, arbore,) se pastreaza pointeri la
obiectul abstract cel mai 'inalt' din ierarhie si prin regulile de
compatibilitate dintre clase in acei pointeri se pot 'agata' orice
fel de obiecte din ierarhie. Sa se implementeze aceasta tehnica pentru ierarhia
anterioara folosind un tablou (sau matrice) de pointeri;
4. Se vor oferi functii virtuale pentru citirea datelor caracteristice
obiectelor si introducerea lor in 'lista', pentru parcurgerea listei
si 'raportarea' specifica a prezentei in lista pentru fiecare obiect
in parte.
Acest document nu se poate descarca
E posibil sa te intereseze alte documente despre:
|
Copyright © 2024 - Toate drepturile rezervate QReferat.com | Folositi documentele afisate ca sursa de inspiratie. Va recomandam sa nu copiati textul, ci sa compuneti propriul document pe baza informatiilor de pe site. { Home } { Contact } { Termeni si conditii } |
Documente similare:
|
ComentariiCaracterizari
|
Cauta document |