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
» Mostenirea


Mostenirea


Mostenirea

Definitii

Mostenirea este posibilitatea de a crea clase noi, definite ca extensii ale altor clase. Clasa initiala se numeste clasa de baza, iar clasa noua, care extinde clasa de baza - clasa derivata Proprietatea cea mai importanta a unei clase derivate este aceea de a include (mosteni) toti membrii definiti in clasa de baza. Deasemenea, clasa derivata poate sa includa si membri noi, acesta fiind unul din scopurile pentru care este creata. Mostenirea este cel de-al 2-lea principiu al programarii orientate obiect, urmatorul dupa incapsulare.



Derivarea este sinonim cu mostenirea.

De exemplu putem sa declaram clasa Persoana, care sa reprezinte orice persoana. Din Persoana putem sa derivam clasa Student. Clasa Persoana va avea campurile private nume si prenume, si metodele publice setValoriPersoana() si afisare(). Clasa Student va mosteni toti membrii clasei Persoana, si va avea in plus campul privat grupa, si metodele publice setValoriStudent() si o alta metoda afisare(), despre care vom discuta mai jos.

Ca sa declaram o clasa derivata, folosim urmatoarea sintaxa:

class nume_clasa_derivata: public nume_clasa_baza ;

Clasa de baza trebuie sa fie declarata mai sus, folosind sintaxa obisnuita.

Iata un exemplu complet de mostenire:

//clase derivate

#pragma warning(disable : 4996)

#include<iostream>

#include<conio.h>

#include<string.h>

using namespace std;

class Persoana ;

class Student: public Persoana ;

void Persoana::setValoriPersoana(char nume[], char prenume[])

void Persoana::afisare()

void Student::setValoriStudent(char nume[], char prenume[],

int grupa)

void Student::afisare()

int main()

Vasile Dumitrescu

Ion Ciubotaru, grupa: 1104

Acest exemplu contine mai multe aspecte noi.

Modul de acces protected. Observati ca membrii nume si prenume din clasa Persoana au fost definiti cu un nou mod de acces - protected. Acest mod de acces este strans legat de mostenire. Membrii definiti cu mod protected pot fi accesati de oriunde din interiorul clasei care in care au fost definiti, sau din clasele derivate. Avem nevoie de un astfel de mod pentru cimpurile din Persoana, pentru a le putea accesa din Student::afisare()

Practic, drepturile pentru modul protected se situeaza intre modurile private si public. Iata un sumar cu modurile de acces si cine le poate accesa:

Mod de acces

public

protected

private

Membri ai aceleiasi clase

da

da

da

Membri ai claselor derivate

da

da

nu

Non-membri

da

nu

nu

Aici non-membri semnifica orice locatie din afara clasei sau a clasele derivate, cum ar fi functia main(), orice functie globala sau o alta clasa.

2. Modul de mostenire. Observati declaratia clasei Student

class Student: public Persoana

Cuvantul cheie public semnifica modul de acces maxim pe care il vor avea membrii mosteniti din clasa de baza. Specificand modul de mostenire public, toti membrii mosteniti isi vor pastra modul de acces initial.

Daca mostenim clasa de baza in modul privat, toti membrii mosteniti din Persoana isi vor pastra modul de acces pentru clasa Student, dar vor deveni privati pentru restul programului. De exemplu, vom putea accesa metoda setValoriPersoana() din setValoriStudent(), si programul de mai sus se va compila. Dar nu vom putea accesa student.setValoriPersoana() din functia main(). Se poate folosi si modul de mostenire protected

In aproape toate cazurile se foloseste mostenirea publica. Celelalte moduri de mostenire nu sunt recomandate.

Ascunderea metodei afisare(). Metoda afisare() a fost declarata atit in clasa Persoana, cat si in Student cu acelasi nume si aceeasi lista de parametri. Este permisa o astfel de declaratie. In acest caz, metoda afisare din clasa derivata ascunde metoda cu acelasi prototip din clasa de baza. In apelul

student.afisare();

se va apela metoda afisare din clasa Student. De fapt clasa Student va avea 2 metode cu acelasi nume si aceiasi parametri - Persoana::afisare() si Student::afisare(). Dar a 2-a metoda o ascunde pe prima. Totusi, metoda Persoana::afisare() nu este disparuta definitiv, ea poate fi accesata de exemplu de alte metode ale clasei Persoana






Politica de confidentialitate




Copyright © 2024 - Toate drepturile rezervate