Scrigroup - Documente si articole

     

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


Clase abstracte. Functia membru virtuala pura

c



+ Font mai mare | - Font mai mic



Clase abstracte. Functia membru virtuala pura

In cazul unei ierarhii de clase mai complicate, clasa de baza poate avea niste proprietati generale despre care stim, dar nu le putem defini numai in clasele derivate. De exemplu sa consideram ierarhia de clase din figura 3.

Observam ca putem determina niste proprietati referitoare la clasele derivate. De exemplu greutatea medie, durata medie de viata si viteza medie de deplasare. Aceste proprietati se vor descrie cu ajutorul unor functii membru. In principiu si pentru clasa animal exista o greutate medie, durata medie de viata si viteza medie de deplasare. Dar aceste proprietati ar fi mult mai greu de determinat si ele nici nu sunt importante pentru noi intr-o generalitate de acest fel. Totusi pentru o tratare generala ar fi bine, daca cele trei functii membru ar fi declarate in clasa de baza si redefinite in clasele derivate. In acest scop s-a introdus notiunea de functie membru virtuala pura.




Figura 3. Ierarhie de clase referitoare la animale

Functia virtuala pura este o functie membru care este declarata, dar nu este definita in clasa respectiva. Ea trebuie definita intr-o clasa derivata. Functia membru virtuala pura se declara in modul urmator. Antetul obisnuit al functiei este precedata de cuvantul cheie virtual, si antetul se termina cu = 0. Dupa cum arata numele si declaratia ei, functia membru virtuala pura este o functie virtuala, deci selectarea exemplarului functiei din ierarhia de clase se va face in timpul executiei programului.

Clasele care contin cel putin o functie membru virtuala pura se vor numi clase abstracte.

Deoarece clasele abstracte contin functii membru care nu sunt definite, nu se pot crea obiecte apartinand claselor abstracte. Daca functia virtuala pura nu s-a definit in clasa derivata atunci si clasa derivata va fi clasa abstracta si ca atare nu se pot defini obiecte apartinand acelei clase.

Sa consideram exemplul de mai sus si sa scriem un program, care referitor la un porumbel, urs sau cal determina daca el este gras sau slab, rapid sau incet, respectiv tiner sau batran. Afisarea acestui rezultat se va face de catre o functie membru a clasei animal care nu se supraincarca in clasele derivate. Fisierul abstract.cpp:

#include <conio.h>

#include <iostream.h>

class animal

int rapid()

int tiner()

void afiseaza();

};

animal::animal( double g, double v1, double v2)

void animal::afiseaza()

class porumbel : public animal

double greutate_medie()

double durata_de_viata_medie()

double viteza_medie()

};

class urs: public animal

double greutate_medie()

double durata_de_viata_medie()

double viteza_medie()

};

class cal: public animal

double greutate_medie()

double durata_de_viata_medie()

double viteza_medie()

};

int main()

Observam ca desi clasa animal este clasa abstracta, este utila introducerea ei, pentru ca multe functii membru pot fi definite in clasa de baza si mostenite fara modificari in cele trei clase derivate.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 766
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